Я новичок в шейдерах и вчера начал играть с некоторыми из них. Они отлично компилируются на моем ПК с Windows, но когда они запускаются на Mac, для обоих возникает ошибка:
ОШИБКА: 0:14: '=': невозможно преобразовать из 'const int' в '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;
}
Один фрагментный шейдер (ошибка на 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;
}
Другой фрагментный шейдер (ошибка на 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;
}