簡體   English   中英

帶有iPhone的OpenGL ES 2.0-無法找到統一的Vertex Shader

[英]OpenGL ES 2.0 with iPhone - Vertex Shader uniform cannot be located

我有以下頂點着色器

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”為真)。 有人可以解釋為什么會這樣嗎?

鏈接程序后,您只能檢索統一的位置(不執行操作),因為這些位置是每個程序的狀態,並且在程序的每個着色器中都是已知的。 GLSL編譯器可以在鏈接期間優化未使用的制服,因此只有在鏈接之后才知道它們的位置,這也是所有未明確綁定的屬性都獲得其位置的時刻。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM