gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 14:43:04 24 4
gpt4 key购买 nike

我在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
我不明白,对我来说似乎很好。

最佳答案

着色器是为OpenGL ES(GLSL ES 1.00)编写的。当您尝试使用"desktop" 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;

// [...]

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

或者,您可以将宏用于精度限定符:

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

// [...]

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

// [...]

关于c++ - 为什么我的OpenGL自定义着色器给我这个错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61247278/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com