如何在OpenGL es 2.0 vertex shader pro中找到所有制服的列表

Ted*_*tel 12 opengl-es vertex vertex-shader

我正在尝试学习如何编写顶点着色器.在Apple的示例项目中,他们有一条线来设置

glUniform1f(uniforms[UNIFORM_TRANSLATE], (Glfloat)transY);
Run Code Online (Sandbox Code Playgroud)

然后使用此值

// value passt in f
// glUniform1f(uniforms[UNIFORM_TRANSLATE](Glfloat)transY);
uniform float translate;

void main()
{
    gl_Position.y+=sin( translate);
…
Run Code Online (Sandbox Code Playgroud)

我无法找到所有制服的所有制服的清单.

有没有人知道我在哪里可以找到所有制服的清单和一本关于学习如何编程顶点着色器的好书或教程.

kva*_*ark 26

统一参数是传递给GL着色器的数据,在绘制调用期间不会更改.

您可以使用以下代码查询链接的GLSL程序以获取活动制服列表:

int total = -1;
glGetProgramiv( program_id, GL_ACTIVE_UNIFORMS, &total ); 
for(int i=0; i<total; ++i)  {
    int name_len=-1, num=-1;
    GLenum type = GL_ZERO;
    char name[100];
    glGetActiveUniform( program_id, GLuint(i), sizeof(name)-1,
        &name_len, &num, &type, name );
    name[name_len] = 0;
    GLuint location = glGetUniformLocation( program_id, name );
}
Run Code Online (Sandbox Code Playgroud)

此代码检索许多活动的制服并通过它们进行迭代,提取名称,类型,值的数量和统一位置.


vmp*_*str 0

我认为在该示例代码中,UNIFORM_TRANSLATE 被定义为 0,然后有这样的代码:

uniforms [UNIFORM_TRANSLATE] = glGetUniformLocation (programId, "position");
Run Code Online (Sandbox Code Playgroud)

所以所有的制服都是通过他们的名字来检索的——在本例中是“位置”。