Dus*_*ley 5 java opengl glsl libgdx glsles
我是着色器的新手,我昨天开始和他们中的一些玩弄.它们在我的Windows PC上正常编译,但是当它们在Mac上运行时,两者都有错误:
错误:0:14:'=':无法从'const int'转换为'float的4分量向量'
在Android上只有第二个着色器给我一个错误.它有一个错误,提到没有匹配的功能点重载.
它们使用相同的顶点着色器:
attribute vec4 a_position;
attribute vec4 a_color;
attribute vec2 a_texCoord0;
uniform mat4 u_projTrans;
varying vec4 vColor;
varying vec2 vTexCoord;
void main() {
vColor = a_color;
vTexCoord = a_texCoord0;
gl_Position = u_projTrans * a_position;
}
Run Code Online (Sandbox Code Playgroud)
一个片段着色器(Mac上出错):
#ifdef GL_ES
#define LOWP lowp
precision mediump float;
#else
#define LOWP
#endif
varying LOWP vec4 vColor;
varying vec2 vTexCoord;
uniform sampler2D u_texture;
void main() {
vec4 texColor = texture2D(u_texture, vTexCoord);
texColor.rgb = 1.0 - texColor.rgb;
gl_FragColor = texColor * vColor;
}
Run Code Online (Sandbox Code Playgroud)
另一个Fragment Shader(mac和android上的错误):
#ifdef GL_ES
#define LOWP lowp
precision mediump float;
#else
#define LOWP
#endif
varying LOWP vec4 vColor;
varying vec2 vTexCoord;
uniform sampler2D u_texture;
void main() {
vec4 texColor = texture2D(u_texture, vTexCoord);
vec3 gray = vec3(0.2125, 0.7154, 0.0721);
vec4 color = dot(gray, texColor);
color.a = texColor.a;
gl_FragColor = color * vColor;
}
Run Code Online (Sandbox Code Playgroud)
在第一个着色器中,您在此行中有错误 -texColor.rgb = 1.0 - texColor.rgb;您需要编写:
texColor.rgb = vec3(1.0) - texColor.rgb;
Run Code Online (Sandbox Code Playgroud)
在第二个着色器中,您在这一行中有错误 -vec4 color = dot(gray, texColor);灰色是 vec3,texcolor 是 vec4。vec3 和 vec4 之间的点积是什么?没有这样的dot功能可以做到这一点。您可以调用float dot(vec3, vec3)或float dot(vec4, vec4)。因此,将该行更改为:
vec4 color = vec4(dot(gray, texColor.rgb));
Run Code Online (Sandbox Code Playgroud)
或者
vec4 color = vec4(dot(vec4(gray, ???), texColor)); // put in ??? float number you want
Run Code Online (Sandbox Code Playgroud)
(下次请告诉我们错误发生在哪一行)