0

シェーダーで OpenGL glTexEnv の動作を模倣しようとしています。これは非常に複雑な機能ですが、実行できるはずです。唯一の問題は、テクスチャ ベースの内部フォーマットによって関数の動作が異なることです。テクスチャからその情報を取得するにはどうすればよいですか? テクスチャ ベースの内部フォーマットは glTexImage2D 関数で指定されるので、変数に保存し、バインドされたテクスチャに応じて均一なシェーダに渡す必要がありますか、それとも OpenGL で取得できますか?

4

2 に答える 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. シェーダーに値を渡す 1 つの大きなシェーダー...
  2. 必要に応じて、各動作や内部フォーマットなどのシェーダーを動的に作成します。

私は 2 番目の方法を好みます。これは、1 つの大きくて遅いオールラウンド シェーダーにならないからです。その代わりに、小さな特定のシェーダーを取得します。

さらに: この一般的な問題は、「コンビナトリアル シェーダー爆発」問題として知られています。

于 2009-07-21T10:10:04.870 に答える