在OpenGL ES中,纹理未声明的标识符

3

我尝试编译这个着色器:

varying vec2 TexCoords;
varying vec4 color;

uniform sampler2D text;
uniform vec3 textColor;

void main()
{    
    vec4 sampled = vec4(1.0, 1.0, 1.0, texture(text, TexCoords).r);
    color = vec4(textColor, 1.0) * sampled;
}

这是关于OpenGL ES的内容。我遇到的错误如下:

ERROR: 0:2: 'vec2' : No precision defined for this type
ERROR: 0:3: 'vec4' : No precision defined for this type
ERROR: 0:6: 'vec3' : No precision defined for this type
ERROR: 0:10: 'texture' : undeclared identifier
ERROR: 0:10: invalid function call

请注意,它能在OpenGL 3.3上编译通过,但无法在es上编译通过。

1个回答

1
请参阅OpenGL ES Shading Language 1.00规范-4.5.3默认精度修饰符

片段语言对于浮点类型没有默认的精度修饰符。因此,对于float、浮点向量和矩阵变量声明,要么声明必须包括一个精度修饰符,要么先前必须声明默认的float精度。

因此,您必须添加一个精度修饰符,例如:
precision mediump float;

GLSL ES 3.00引入了重载的函数texture,但在GLSL ES 1.00中不支持。您需要使用函数texture2D

vec4 sampled = vec4(1.0, 1.0, 1.0, texture(text, TexCoords).r);

vec4 sampled = vec4(1.0, 1.0, 1.0, texture2D(text, TexCoords).r);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接