0

正常にレンダリングできるプログラムオブジェクトがあります。

しかし、実行時のアプリケーションで、頂点とフラグメントのシェーダーソースを変更してコンパイルし、によって再度リンクするとglLinkProgram()、プログラムをレンダリングできないことがわかります。

注:シェーダーとプログラムは正常に再コンパイル/再リンクされました。

ステータスを確認するだけです

glGetShaderiv(fsId, GL_COMPILE_STATUS, &compileStatus); 
and glGetProgramiv(progId, GL_LINK_STATUS, &linkStatus); 
the result is compileStatus = linkStatus = 1

OpenGL ES 2.0でプログラムオブジェクトを再リンクできるかどうか疑問に思っていますか?

私のGPU情報:

GL_RENDERER: PowerVR SGX 530
GL_VENDOR: Imagination Technologies
GL_VERSION: OpenGL ES 2.0
4

1 に答える 1

2

あなたはできる?OpenGL ES 仕様では、はい。あなたはすべきですか?いいえ。

ES バージョンであっても、OpenGL で何かを行うときの一般的なルールは次のとおりです。一般的に行われていることがわかっている場合を除き、何もしないでください。人里離れた道に進むほど、ドライバーのバグに遭遇する可能性が高くなります。

一般に、プログラムの使用パターンは、それらをリンクし、それらをまとめて使用し、アプリケーションを閉じるときにそれらを削除することです。それに固執する必要があります。新しいプログラムが必要な場合は、新しいプログラムを作成します

とにかく、再リンクすると、すべての均一な状態が破棄されます。したがって、新しいプログラムを作成する代わりに、古いプログラム内で再リンクして何かを保存しているわけではありません。確かに、この方法の方が優れています。新しいリンクが失敗した場合でも、古いプログラムが残っています。一方、プログラムで再リンクして失敗すると、古いデータは破棄されます。

于 2013-03-22T10:53:39.127 に答える