首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于第二个uniform,OpenGL无法使用glGetUniformLocation找到uniform

对于第二个uniform,OpenGL无法使用glGetUniformLocation找到uniform
EN

Stack Overflow用户
提问于 2013-12-11 23:26:47
回答 1查看 1.6K关注 0票数 1

我和我的一个朋友正在做一些3D编程,我们试图得到一个点光源。我们正在尝试访问顶点着色器中灯光位置的制服,但它没有被找到。

下面是一些代码:

代码语言:javascript
复制
GLuint program = LoadShaders(shaders);
glUseProgram(program);

rotationLoc = glGetUniformLocation(program,"vRotationMatrix");
if(rotationLoc != -1)
    glUniformMatrix4fv(rotationLoc,1,GL_TRUE,&world.rotationMatrix[0][0]);

LightLoc = glGetUniformLocation(program, "vLightPos");
if (LightLoc != -1)
    glUniform3fv(LightLoc, 1, LightPos);

正如你所看到的,我们首先对旋转矩阵做同样的事情。它适用于旋转矩阵,而不适用于LightLoc。错误行是: LightLoc = glGetUniformLocation(program,"vLightPos");LightLoc返回-1,但它应该返回2。

我们的顶点着色器(部分)如下所示:

代码语言:javascript
复制
uniform mat4 vRotationMatrix;
uniform vec3 vLightPos;
void main()
{
    color = vColor;
    oTexCoord = vTexCoord;
    gl_Position = vRotationMatrix * vPosition;
    lightPos = vLightPos;
}
EN

回答 1

Stack Overflow用户

发布于 2013-12-12 00:20:05

尝试使用注释检查顶点着色器下的代码输出着色器编译的结果:

代码语言:javascript
复制
GLint Result = GL_FALSE;
int InfoLogLength;



// Compile Vertex Shader
printf("Compiling shader : %s\n", vertex_file_path);
char const * VertexSourcePointer = VertexShaderCode.c_str();
glShaderSource(VertexShaderID, 1, &VertexSourcePointer , NULL);
glCompileShader(VertexShaderID);

// Check Vertex Shader
glGetShaderiv(VertexShaderID, GL_COMPILE_STATUS, &Result);
glGetShaderiv(VertexShaderID, GL_INFO_LOG_LENGTH, &InfoLogLength);
if ( InfoLogLength > 0 ){
    std::vector<char> VertexShaderErrorMessage(InfoLogLength+1);
    glGetShaderInfoLog(VertexShaderID, InfoLogLength, NULL, &VertexShaderErrorMessage[0]);
    printf("%s\n", &VertexShaderErrorMessage[0]);
}

也许有任何警告或错误。与片段着色器编译使用的相同

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20523069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档