シェーダーで OpenGL glTexEnv の動作を模倣しようとしています。これは非常に複雑な機能ですが、実行できるはずです。唯一の問題は、テクスチャ ベースの内部フォーマットによって関数の動作が異なることです。テクスチャからその情報を取得するにはどうすればよいですか? テクスチャ ベースの内部フォーマットは glTexImage2D 関数で指定されるので、変数に保存し、バインドされたテクスチャに応じて均一なシェーダに渡す必要がありますか、それとも OpenGL で取得できますか?
2 に答える
0
いいえ、テクスチャ ベースの内部フォーマットはシェーダーで直接使用できません。自分で保存したくない場合は、いつでもその値を GL に要求して、シェーダーに渡すことができます。
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_INTERNAL_FORMAT, &outFormat)`
于 2009-10-21T20:45:04.460 に答える
0
テクスチャ ブレンド値は、ビルトイン ユニフォームの一部ではないようです。
http://www.opengl.org/sdk/libs/OpenSceneGraph/glsl_quickref.pdf
通常、FFP の動作を模倣するには 2 つの方法があります。
- シェーダーに値を渡す 1 つの大きなシェーダー...
- 必要に応じて、各動作や内部フォーマットなどのシェーダーを動的に作成します。
私は 2 番目の方法を好みます。これは、1 つの大きくて遅いオールラウンド シェーダーにならないからです。その代わりに、小さな特定のシェーダーを取得します。
さらに: この一般的な問題は、「コンビナトリアル シェーダー爆発」問題として知られています。
于 2009-07-21T10:10:04.870 に答える