gl_PointCoord необъявленный во фрагментном шейдере на macOS? - PullRequest
1 голос
/ 20 апреля 2020

Я использую cocos 3.17 на Xcode 11 на Ma c. Это мои фрагментные и вершинные шейдеры.

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

Когда я запускаю его как приложение Ma c, это дает мне эту ошибку:

cocos2d:
ERROR: 0:36: Use of undeclared identifier 'gl_PointCoord'
ERROR: 0:37: Use of undeclared identifier 'pos'

кто-то может помочь мне выяснить, почему?

1 Ответ

0 голосов
/ 29 апреля 2020

После некоторых неприятностей я нашел решение. Предполагается, что шейдер GLSL, в верхней части которого нет директивы # version , равен 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.

...