gl_PointCoord 在 macOS 上的片段着色器中未声明?
gl_PointCoord undeclared in fragment shader on macOS?
我在 Xcode 11 和 Mac 上使用 cocos 3.17。
这些是我的片段和顶点着色器。
myShader.frag
#ifdef GL_ES
precision lowp float;
#define LOWP lowp
#else
#define LOWP
#endif
uniform sampler2D u_texture;
varying LOWP vec4 v_fragmentColor;
uniform mat4 u_rotation;
void main()
{
mat4 t1= mat4(1);
mat4 t2= mat4(1);
t1[3] = vec4(-0.5,-0.5,1,1);
t2[3] = vec4(+0.5,+0.5,1,1);
vec2 pos = (t2 * u_rotation * t1 * vec4(gl_PointCoord, 0, 1)).xy;
gl_FragColor = v_fragmentColor * texture2D(u_texture, pos);
}
myShader.vert
#ifdef GL_ES
#define LOWP lowp
#else
#define LOWP
#endif
attribute vec4 a_position;
uniform float u_pointSize;
uniform LOWP vec4 u_fragmentColor;
varying LOWP vec4 v_fragmentColor;
void main()
{
gl_Position = CC_MVPMatrix * a_position;
gl_PointSize = u_pointSize;
v_fragmentColor = u_fragmentColor;
}
当我 运行 它作为 Mac 应用程序时,它给我这个错误:
cocos2d:
ERROR: 0:36: Use of undeclared identifier 'gl_PointCoord'
ERROR: 0:37: Use of undeclared identifier 'pos'
谁能帮我弄清楚为什么?
经过一番折腾,我找到了解决办法。
顶部没有 #version 指令的 GLSL 着色器假定为 1.10,但我确实需要 1.2 版。所以,我需要在初始化中添加 '#version 120\n' 作为 compileTimeHeader 字符串:
GLProgram *program = new GLProgram();
program->initWithByteArrays(myShader_vert, myShader_frag, "#version 120\n", "");
OpenGL 文档中有一个错误,其中指出 gl_PointCoord 是 1.1 的功能,而实际上它在 1.2 中引入。
我在 Xcode 11 和 Mac 上使用 cocos 3.17。 这些是我的片段和顶点着色器。
myShader.frag
#ifdef GL_ES
precision lowp float;
#define LOWP lowp
#else
#define LOWP
#endif
uniform sampler2D u_texture;
varying LOWP vec4 v_fragmentColor;
uniform mat4 u_rotation;
void main()
{
mat4 t1= mat4(1);
mat4 t2= mat4(1);
t1[3] = vec4(-0.5,-0.5,1,1);
t2[3] = vec4(+0.5,+0.5,1,1);
vec2 pos = (t2 * u_rotation * t1 * vec4(gl_PointCoord, 0, 1)).xy;
gl_FragColor = v_fragmentColor * texture2D(u_texture, pos);
}
myShader.vert
#ifdef GL_ES
#define LOWP lowp
#else
#define LOWP
#endif
attribute vec4 a_position;
uniform float u_pointSize;
uniform LOWP vec4 u_fragmentColor;
varying LOWP vec4 v_fragmentColor;
void main()
{
gl_Position = CC_MVPMatrix * a_position;
gl_PointSize = u_pointSize;
v_fragmentColor = u_fragmentColor;
}
当我 运行 它作为 Mac 应用程序时,它给我这个错误:
cocos2d:
ERROR: 0:36: Use of undeclared identifier 'gl_PointCoord'
ERROR: 0:37: Use of undeclared identifier 'pos'
谁能帮我弄清楚为什么?
经过一番折腾,我找到了解决办法。 顶部没有 #version 指令的 GLSL 着色器假定为 1.10,但我确实需要 1.2 版。所以,我需要在初始化中添加 '#version 120\n' 作为 compileTimeHeader 字符串:
GLProgram *program = new GLProgram();
program->initWithByteArrays(myShader_vert, myShader_frag, "#version 120\n", "");
OpenGL 文档中有一个错误,其中指出 gl_PointCoord 是 1.1 的功能,而实际上它在 1.2 中引入。