Opengl es gl_颜色是WebGL上未声明的标识符

Opengl es gl_颜色是WebGL上未声明的标识符,opengl-es,webgl,fragment-shader,Opengl Es,Webgl,Fragment Shader,我正在查看包含以下代码段的: void main() { // Set the output color of our current pixel gl_FragColor = gl_Color;} 我尝试在我的WebGL上使用gl_颜色。我得到一个错误,gl_颜色是未声明的标识符 我做错了什么 提前感谢您的帮助。我猜您正在尝试使用常规C编译器编译GLSL代码 看起来应该是C代码,但实际上是GLSL源代码,由OpenGL GLSL编译器编译,而不是您的机器C编译器 片段着色器有一个预定义变量“

我正在查看包含以下代码段的:

void main() {
// Set the output color of our current pixel
gl_FragColor = gl_Color;}
我尝试在我的WebGL上使用gl_颜色。我得到一个错误,gl_颜色是未声明的标识符

我做错了什么


提前感谢您的帮助。

我猜您正在尝试使用常规C编译器编译GLSL代码

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

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


您引用的示例的代码位于shader.frag文件中,shader.init()引用了该文件。OpenGL库本身将处理将其编译为计算机的GPU指令。将代码放入该文件中,希望该示例能够正常工作:)

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

谢谢您的帮助。我只是谷歌GLSL ES 1.0。它是开着的。如何在GLSL ES 1.0上访问等效的gl_颜色?没有等效的gl_颜色或任何gl_顶点、gl_法线等-没有复制或模拟旧固定管道的任何方面,并且glColorPointer等函数在ES 2.0中不起作用。您需要根据需要定义自己的属性或统一,并以正常方式获取/设置它。我是WebGL新手。我只是尝试将帧缓冲区上的当前像素与当前纹理混合。最好的方法是什么?要使用普通混合模式(glEnable(Glu BLEND)、glBlendFunc等),只需输出一个具有正确alpha的像素。无法从当前帧缓冲区读回,但可以渲染到纹理,然后从该纹理进行采样,尽管从要渲染到的同一纹理中读取的结果未定义。除其他外,能够读取帧缓冲区可能会在许多多采样实现中引入竞争条件,或者需要更复杂、更慢的硬件路径。在花费更多时间解决此问题后,我最终使用multitexture TEXTURE0和TEXTURE1来解决我的问题。请参阅关于的相关讨论。谢谢你的帮助。我忘了在我的原始帖子中提到我正在使用WebGL。我正在修改一个已经生效的现有WebGL(和GLSL)示例。我只是尝试在上面的教程中加入gl_颜色。看来埃切斯的答案是正确的。可能WebGL使用的是GLSL 1.0。