片段着色器用alpha通道着色灰度纹理

时间:2012-06-20 08:58:37

标签: opengl shader

解决方案:修复拼写错误(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脚本问题,我还没有发布答案。

添加下划线后,着色器完全按照预期执行。

0 个答案:

没有答案