为什么我的OpenGL自定义着色器会给我这个错误?

问题描述 投票:0回答:1

我在XCode11上为我的macOS应用程序使用了带有cocos2d 3.17的自定义着色器,但遇到了一些麻烦。

myShader.frag

#ifdef GL_ES
 precision lowp float;
#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

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;
}

使用此配置,我出现此错误:

cocos2d: ERROR: 0:21: 'vec4' : syntax error: syntax error

关于myShader.vert

我不明白,对我来说似乎很好。有人可以帮助我吗?谢谢,我将等待您的回复。

Elena

c++ macos opengl shader cocos2d-x
1个回答
0
投票

着色器是为OpenGL ES(GLSL ES 1.00)编写的。当您尝试使用“桌面” OpenGL编译着色器时,由于精度限定符,您将得到错误。

删除顶点着色器中的精度限定符:

attribute vec4 a_position;
uniform float u_pointSize;
uniform vec4 u_fragmentColor;
varying vec4 v_fragmentColor;

void main()
{
  gl_Position     = CC_MVPMatrix * a_position;
  gl_PointSize    = u_pointSize;
  v_fragmentColor = u_fragmentColor;
}

和片段着色器:

#ifdef GL_ES
 precision lowp float;
#endif

uniform sampler2D u_texture;
varying vec4 v_fragmentColor;
uniform mat4 u_rotation;

// [...]

精度限定符已在OpenGL ES的GLSL 1.30(OpenGL 3.0)代码可移植性中添加(不用于功能性),但是,在以前的版本中不支持它们。(由于未指定版本,因此您使用的是GLSL 1.00)

© www.soinside.com 2019 - 2024. All rights reserved.