我正在尝试在我的OpenGL ES 2.0引擎中实现来自在线教程(lighthouse3d.com)的一些着色器。
问题在于,由于某种原因,在main()作用域中声明的任何变量都会导致整个着色器失败。例如,以下内容会失败:
void main(){
vec4 color;
gl_FragColor = vec4(1.0, 0.5, 0.5, 1.0);
}
但这个是完美的:
void main(){
//vec4 color;
gl_FragColor = vec4(1.0, 0.5, 0.5, 1.0);
}
我的顶点着色器也有同样的问题。(编辑:不好意思,只是片段着色器似乎有这个问题)使用任何非常量值的唯一方法是使用属性、varying、uniform等。例如,以下代码可以正常工作:
uniform sampler2D texture;
varying lowp vec4 fragcol;
varying lowp vec2 texco;
void main(){
gl_FragColor = fragcol * texture2D(texture, texco);
}
此外,我在寻找有关GLSL ES(或其称之为的版本)的文档或资源方面遇到了很大的麻烦。我所能找到的只有这个链接:http://old.siggraph.org/publications/2006cn/course16/KhronosSpecs/ESLanguageSpec1.10.11.pdf。
以下是我找到的与变量声明相关的全部内容:
[省略]没有默认类型。所有变量和函数声明必须具有声明的类型,以及可选的限定符。通过指定其类型,后跟一个或多个用逗号分隔的名称来声明变量。[省略]
这正是我所做的:
声明类型:vec4 接着是一个或多个名称:color;
vec4 color
我不知所措
编辑: GLES20.glGetError() 返回错误码1282