2017-01-07 8 views
7

私はVBO(頂点バッファオブジェクト)とVAO(頂点配列オブジェクト)を作成し、このでした:私はこれをした後vboを削除してから、vao仮定すべてを描くことができ`Vertex Buffer Object`を` Vertex Array Objects`にバインドして削除しますか?

glBindVertexArray(vao); 
glBindBuffer(GL_ARRAY_BUFFER, vbo); 
glBufferData(...); 
glVertexAttribPointer(...); 
glEnableVertexAttribArray(0); 
glBindVertexArray(0); 

は順番にありますか?

私はバッファーがvaoに結合することを知っていますので、私はできると思います。

私のコンピュータ(Intelグラフィックス)のバッファを削除すると問題はありますが、すべて正常に表示されますが、友人のコンピュータ(AMD)には何も表示されません。

何が問題なのですか?

(私はバッファを削除しない場合ちなみに、プログラムが自分のコンピュータ上で、私の友人の上で両方の作品)

答えて

6

バインドを解除した後、はい、OpenGLの4.5あたりとして、それを削除するには合法ですVAO

2.6.1.2名前削除し、それがGLコンテキストによって現在使用されている間、オブジェクトが削除される場合削除

オブジェクト、その名前 はすぐに未使用としてマークされ、オブジェクトのいくつかの種類が自動的にされています は、セクション5.1.2で説明されているように、現在のコンテキストのバインディングポイントからアンバインドされています。 ただし、実際に使用されているオブジェクトは、使用されなくなるまで削除されません。 この状況については、5.1.3節で詳しく説明します。削除の

5.1.2自動アンバインドは、

バッファ、テクスチャ、またはレンダ・オブジェクトが削除されると、それが現在のコンテキスト内に結合し、そして添付ファイルから取り外された任意 バインドポイントから未結合であるオブジェクト現在のコンテキストにバインドされているコンテナオブジェクトの (DeleteBuffers、DeleteTextures、およびDeleteRenderbuffersで説明) [...] オブジェクトに添付されたバッファの削除など、コンテキストにバインドされた ではない頂点配列オブジェクトに添付されたバッファの削除は、影響を受けず、削除されたオブジェクトの参照として引き続き作用し、次のセクションで説明します。

5.1.3削除されたオブジェクトと名の有効期限

バッファ、テクスチャ、サンプラー、レンダ、クエリ、またはシンクオブジェクトが削除されると、その 名前がすぐに(例えば未使用マークされている)は無効となりますが、オブジェクト基礎となる オブジェクトは使用されなくなるまで削除されません。次のいずれかの条件が満たされた場合

バッファ、テクスチャ、サンプラー、またはレンダ・オブジェクトが使用されている:

  • オブジェクトが
  • [任意のコンテナオブジェクトに取り付けられています...]

したがって、AMDのドライバのバグであるか、あなたの説明どおりの状況ではありません。

+0

私はSDLに切り替えたばかりですが、今はすべて描画されていますが、プログラムを終了すると 'wglDeleteContext'の'アクセス違反 'と呼ばれる例外が発生します – JohnMiz

+0

以前はGLFWを使用していましたが、私がプログラムを終了したとき。 (SDLのエラーは 'atioglxx.dll'からです) – JohnMiz

+0

@JohnMiz:AMDでの意味ですか?これは、AMDのバグか、表示されなかったコードのバグです。また、OpenGL 4.5の仕様に基づいて回答しました。あなたが使用しているバージョンについては言及していませんでした。古いバージョンでは、動作が異なるか、未定義になっていたはずです。スペックを自分で確認することは大歓迎です。自由に利用でき、人間が読むことができます。 – ybungalobill

関連する問題