OpenGL ES 2.0 с iPhone - невозможно найти форму Vertex Shader - PullRequest
1 голос
/ 29 августа 2011

У меня есть следующий вершинный шейдер :

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' является истинным). Может кто-нибудь объяснить, почему это так?

1 Ответ

3 голосов
/ 29 августа 2011

Вы можете получить одинаковые местоположения только после связывания программы (что вы не делаете), так как это состояние каждой программы и известно в каждом шейдере программы. Компилятор GLSL может оптимизировать удаление неиспользуемой униформы во время компоновки, поэтому их расположение должно быть известно только после компоновки, что также является моментом, когда все атрибуты, не связанные явно, получают свое местоположение.

...