解決策: タイプミスを修正します (glColor -> gl_Color)
グレースケール カラーのテクスチャと、0f または 1f (間に何もない) のアルファ チャネルがあります。テクスチャを緑で描画したいのですが、アルファが 1 のときだけで、アルファが 0 のときは何も描画しません。緑を選択するには、GLfloat green_opaque .5 1 .5 1 で glColor4fv green_opaque を設定しました。
今、私はこのフラグメント シェーダーを使用します。
const char * fragment_shader_source=
"uniform sampler2D tex;"
"void main() {"
" vec4 color=texture2D(tex,gl_TexCoord[0].st);"
" if (color[3]!=0) {"
#ifdef A
" gl_FragColor=color*glColor;"
#else
" gl_FragColor=color;"
#endif
" } else {"
" discard;"
" }"
"}"
;
A がない場合、シェーダーはアルファ チャネルを尊重しますが、レンダリングされたテクスチャは明らかにグレーのままです。ここで、A を定義すると、シェーダーは希望どおりにテクスチャを色付けしますが、アルファ チャネルは無視されます。
ここで何が間違っていますか?それともドライバー/ハードウェアのバグですか?
OpenGL ベンダー文字列: Advanced Micro Devices, Inc. OpenGL レンダラー文字列: AMD Radeon HD 6570 OpenGL バージョン文字列: 4.2.11554 互換性プロファイル コンテキスト OpenGL シェーディング言語バージョン文字列: 4.20
答え:
「シェーダーの「glColor」ではなく「gl_Color」のことですか?
まさにそれが問題でした-ところで、私は昨日すでに自分自身を理解していましたが、Javaスクリプトの問題により、まだ回答を投稿できませんでした.
アンダースコアを追加した後、シェーダーは本来の動作を正確に実行しました。