4

プログラムが存在する前に (glDeleteTextures を使用して) 作成したすべてのテクスチャを削除する必要がありますか、それとも OpenGL が自分でテクスチャを削除しますか?

4

2 に答える 2

4

OpenGL コンテキストを管理するものによっては、テクスチャを削除する必要がない場合があります。例については、この質問を参照してください。

ただし、自分でクリーンアップするのはよいことであるというコンセンサスがあるようですが、C++ RAII を使用してクリーンアップを行う場合は注意してください。RAII を介して OpenGL オブジェクトを管理する C++ オブジェクトが、OpenGL コンテキストなしで作成または破棄されると、未定義の動作が発生します。

参照:オブジェクト指向言語の問題

OpenGL API と OpenGL オブジェクトは、C++ OOP の原則に直感的にマップされません。

于 2012-08-14T18:46:51.070 に答える
2

OpenGL リソースは、それらにアクセスできるすべてのコンテキストが破棄されると、暗黙的に解放されます。クライアントが終了すると、プロセスの OpenGL コンテキストが破棄されます。ただし、間接 GLX コンテキスト オブジェクトの場合、X11 クライアント間で共有される可能性があるため、それらへのアクセス権を持つ最後のクライアントが終了した後にのみ解放される可能性があります。

それにもかかわらず、自分で後片付けをすることは常に良い習慣です。

于 2012-08-14T19:55:06.133 に答える