解决方案:修复拼写错误(glColor - > gl_Color)
我有一个带有灰度颜色的纹理和一个带有0f或1f的alpha通道(两者之间没有任何东西)。我想以绿色绘制纹理,但只有当alpha为1时才绘制,并且当alpha为0时不绘制。要选择绿色,所以我设置glColor4fv green_opaque with GLfloat green_opaque .5 1 .5 1
现在,我使用此片段着色器:
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,着色器会尊重Alpha通道,但渲染的纹理显然仍然是灰色的。现在,我定义了A,着色器现在可以根据需要对纹理进行着色,但现在会忽略alpha通道。
我在这里做错了什么?或者它是驱动程序/硬件错误?
OpenGL供应商字符串:Advanced Micro Devices,Inc。 OpenGL渲染器字符串:AMD Radeon HD 6570 OpenGL版本字符串:4.2.11554兼容性配置文件上下文 OpenGL着色语言版本字符串:4.20
答案:
“你的意思是”gl_Color“而不是你的着色器中的”glColor“吗?”
正是那个问题 - 我昨天已经弄明白了,但是由于java脚本问题,我还没有发布答案。
添加下划线后,着色器完全按照预期执行。