1
我有以下顶点着色器:的OpenGL ES 2.0与iPhone - 顶点着色均匀不能位于
uniform mediump mat4 projMx;
attribute vec2 a_position;
attribute vec4 a_color;
attribute float a_radius;
varying vec4 v_color;
void main()
{
vec4 position = vec4(100.0,600.0,1.0,1.0);
gl_Position = projMx * position;
gl_PointSize = a_radius*2.0;
v_color = a_color;
}
..和下面片段着色器:
#ifdef GL_FRAGMENT_PRECISION_HIGH
precision highp float;
#else
precision mediump float;
#endif
varying vec4 v_color;
void main()
{
gl_FragColor = v_color;
}
..以及以下Obj-C代码:
//..shaders have been created..
program = glCreateProgram();
glAttachShader(program, shaders[0]);
glAttachShader(program, shaders[1]);
GLfloat projMx[16] = {2/screenWidth,0,0,-1,0,2/-screenHeight,0,1,0,0,-2,-1,0,0,0,1};
projMxId = glGetUniformLocation(program, "projMx");
NSLog(@"uniform location:%i",projMxId);
'projMx'的统一位置是-1(即, 'projMxId == -1'为true)。有人能解释为什么会出现这种情况吗?
解决方法是在glUseProgram(myProgram)之后调用它,谢谢Christian。 – KomodoDave
@KomodoDave不,规范没有提到任何有关的内容。你不需要使用该程序来获得统一的位置。它必须已成功链接(调用'glLinkProgram'后)。在程序再次链接之前,位置不会改变,否则每帧查询统一位置将会非常繁琐。 –
对不起 - 是的我的意思是glLinkProgram(> _ <) – KomodoDave