これを行う適切な方法は何ですか?OpenGLプログラム/シェーダの初期化解除
私はこれらのステップをやってる:
- は、シェーダ(複数可)を作成します
- コンパイルシェーダ(S)
- プログラム
- の作成は
- Linkプログラムをプログラムする(S)シェーダを取り付け
- 削除シェーダ
http://www.opengl.org/wiki/GLSL_Objectそれは言う:プログラムをリンクした後でも、シェーダオブジェクトを明示的にデタッチする必要はありません。しかし、いったんリンクが完了すると、そうすることをお勧めします。そうしないと、プログラムオブジェクトは、それらを削除しようとすると、アタッチされたシェーダオブジェクトを有効に保ちます。
また、Proper way to delete GLSL shader?からは、シェーダを削除しないとメモリが増えてしまうとのことです。
http://www.opengl.org/sdk/docs/man/xhtml/glDetachShader.xmlをチェックすると、と表示されます。shaderがすでにglDeleteShaderの呼び出しによって削除のフラグが立てられていて、他のプログラムオブジェクトに接続されていない場合、そのオブジェクトは切り離された後に削除されます。
私の右手を外しておかないと、私の#6は役に立たないのですか?
プログラムを正しくコンパイルした後(メモリを節約するために)、デタッチして削除する必要がありますか、またはアプリケーションの終了時にのみデタッチ/削除する必要がありますか?
sidenote: 'glBindAttribLocation'が有効になるように属性バインディングに加えられた変更に対して' glLinkProgram'を呼び出す必要があります。したがって、リンクされたプログラムからシェーダを削除して切り離すと、シェーダをシェーダに再バインドせずに属性バインディングを効果的に変更することはできません。 – PeterT