【发布时间】:2020-08-03 00:56:56
【问题描述】:
我在 Mac 上的 Xcode 11 上使用 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'
有人可以帮我找出原因吗?
【问题讨论】:
-
我会真的警惕在 un-
#version'd GLSL 中折腾像0和1这样的整数,希望它们会自动转换为float. -
另外,请确保您没有意外交换 vert/frag 源,
gl_PointCoord是一个仅 frag 的内置变量。 -
是的,你说得对,我交换了来源。我发现 #version 120 指令丢失了,如果我将它添加到着色器的开头,它会给我一个错误,但因为 cocos 在初始化中添加了空宏。当我调用compileShader时我必须将它作为compileTimeHeaders传递,当我调用compileShader时我必须将它作为compileTimeHeaders传递,虽然我不知道具体该怎么做
-
我刚刚研究了 cocs2d-x api(
GLProgram和GLProgramState)。遗憾的是,我没有找到任何相关信息。我似乎 cocos2d-x 是为 OpenGL ES 2.0 设计的,不能处理更新的 GLSL 版本。
标签: c++ macos opengl glsl cocos2d-x