2010-12-17 53 views

回答

8

WebGL使用Open GL ES 2.0作为其基础,因此您应该使用GLSL ES 1.0作为着色器。 GLSL ES没有gl_Color,因此您必须重写此着色器。

+1

感谢您的帮助。我只是谷歌GLSL ES 1.0。它位于http://www.khronos.org/registry/gles/specs/2.0/GLSL_ES_Specification_1.0.17.pdf。我如何在GLSL ES 1.0上访问gl_Color的等价物? – pion 2010-12-17 13:14:30

+2

没有等同于gl_Color或gl_Vertex,gl_Normal等的任何一个 - 旧的固定管道的任何方面都不会被复制或模拟,而像glColorPointer这样的函数在ES 2.0中不起作用。您需要根据需要定义自己的属性或制服,并以正常方式进行设置。 – Tommy 2010-12-17 13:38:10

+0

我是WebGL新手。我只是试图混合framebuffer当前像素与当前纹素。什么是最好的方式来做到这一点? – pion 2010-12-17 14:26:18

-3

我的猜测是,您正在尝试使用常规C编译器编译GLSL代码。

它看起来应该是C代码,但它实际上是GLSL源代码 - 被OpenGL GLSL编译器编译,而不是您的机器C编译器。

片段着色器有一个预定义的变量'gl_Color',它是顶点着色器的输出。

您引用的示例具有shader.frag文件内的代码,该文件由shader.init()引用。 OpenGL库本身将把它编译成你机器的GPU指令。将代码放在该文件中,并希望该示例能够运行:)

+0

我忘了提及我在原始帖子上使用WebGL。我正在修改已有的WebGL(和GLSL)示例。我只是想在上面的教程中加入gl_Color。看来,Echeese有正确的答案。也许WebGL使用GLSL 1.0。 – pion 2010-12-17 13:21:38