gl_PointCoord在macOS的fragment shader中未声明?

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

我在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'

有人能帮我找出原因吗?

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

经过一番周折,我找到了解决方案。一个GLSL着色器,它不具有一个简单的功能。#版本 指令在顶部被认为是1.10,但我真的需要1.2版本。所以,我需要在上面添加 '#version 120' 作为 编译时间头 字符串的初始化。

GLProgram *program = new GLProgram();
program->initWithByteArrays(myShader_vert, myShader_frag, "#version 120\n", "");

有一个 错误 OpenGL文档中规定 gl_PointCoord 是1.1版的功能,而实际上它是在1.2版中引入的。

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