シェーダでOpenGL glTexEnvの動作を模倣しようとしています。それはかなり複雑な機能ですが、実行可能でなければなりません。唯一の問題は、テクスチャベースの内部形式によって機能が異なることです。どのようにしてその情報をテクスチャから得ることができますか?テクスチャベースの内部フォーマットはglTexImage2D関数で与えられていますので、そこにいくつかの変数を保存して、バインドされたテクスチャに応じていくつかのユニフォームでシェーダに渡す必要がありますか、どういうわけかOpenGLで取得できますか?シェーダへのOpenGLテクスチャベース内部フォーマット
答えて
テクスチャのブレンド値は、組み込みの制服の一部ではないようです。
- 一つの大きなシェーダ、シェーダに値を渡す...
- 作成シェーダ、それぞれの行動や内部形式のため:
http://www.opengl.org/sdk/libs/OpenSceneGraph/glsl_quickref.pdf
は、一般的に模倣FFPの行動のための2つの方法があります例えば、必要に応じて動的に変更することができる。
私は2番目の方法が好きです。なぜなら、1つの大きくて遅いallroundシェーダにならないからです。 その代わりに、小さな特定のシェーダが得られます。
さらに、この一般的な問題は「組み合わせシェーダー爆発」問題として知られています。
実際には、1つのシェーダで何かを実装することはできません。テクスチャユニット0のTEXTURE_3DとTEXTURE_2Dターゲットが有効になっているとします。固定関数仕様では、3Dテクスチャがサンプリングされるとしています。プログラム可能なパイプラインは、どのサンプラーが使用されているかに基づいてサンプリングされるものをシェーダーが決定すると言います。つまり、テクスチャターゲットの組み合わせごとに特定のシェーダを構築する必要があります。 1D/2D/3D /立方体、8つのテクスチャユニットでは、すでに64Kのシェーダの可能性を与えています... – Bahbar
いいえ、テクスチャベース内部フォーマットはシェーダで直接利用できません。自分で保存したくない場合は、常にGLにその値を渡してシェーダに渡すように依頼することができます。
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_INTERNAL_FORMAT, &outFormat)`
- 1. シェーダなしのOpenGL ESへのPhotoshopブレンドモード
- 2. QGLShaderProgram OpenGLのシェーダ
- 3. OpenGLシェーダのパフォーマンスプロファイリング
- 4. OpenGLシェーダ対CUDA
- 5. OpenGL ESとOpenGL互換シェーダ
- 6. fragシェーダのOpenGLカラーインデックス?
- 7. シェーダなしのOpenGL
- 8. OpenGL ES 2.0:TexImage2DよりもRenderBufferStorageの内部フォーマットが異なる
- 9. OpenGL:シェーダのあるライン
- 10. Android用OpenGL ES 2.0のシェーダ
- 11. Android用のシェーダOpenGL ES
- 12. OpenGL GL_BGRがテクスチャ内部フォーマットでは機能しない
- 13. OpenGL - 計算シェーダ - iOS - オプション?
- 14. 1つのメインOpenGLプログラム内の複数のシェーダ
- 15. OpenGLシェーダのパイプラインの深さの計算
- 16. エラーメッセージなしのOpenGLシェーダのリンクエラー
- 17. OpenGL ES20のライティングエフェクトの頂点シェーダとフラグメントシェーダ
- 18. OpenGLシェーダの色が「消える」
- 19. OpenGLシェーダのコンパイルに失敗する
- 20. 2つのテクスチャを持つOpenGLシェーダ
- 21. OpenGLプログラム/シェーダの初期化解除
- 22. OpenGL:フラグメントとグラデーションの頂点シェーダ?
- 23. ソフトウェアアーキテクチャ:OpenGLシェーダの作成とコンパイル
- 24. bindBufferBaseとOpenGL計算シェーダの再利用
- 25. OpenGLシェーダがコンパイルされない
- 26. OpenGLシェーダを使用したガウスフィルタ
- 27. NativeActivityでOpenGLシェーダを作成する
- 28. シェーダ付きOpenGLで照明する
- 29. C++ OpenGLシェーダが動作しない
- 30. OpenGL計算シェーダ - 奇妙な結果
内部フォーマットはどのようにシェーダに影響しますか? – Luca
@ルーカ例えば1つのチャンネルしか持たないテクスチャがあるかもしれません(32ビットでエンコードされた赤の値を言いましょう)。シェーダーが少なくとも2つのチャンネル(赤と緑など)を予期している場合、1チャンネルのテクスチャを提供する際に問題が発生する可能性があります。 – wil