opengl getUniformLocation
opengl getUniformLocation
本文关键字:getUniformLocation opengl 更新时间:2023-10-16
我在我的opengl着色器中获得我的制服的适当位置时遇到了麻烦。我总是但总是得到-1从glGetUniformLocation函数返回。
也许我没有把它装好?我在网上读到制服可以优化不使用它们,但我确实以一种可以影响我的着色器的方式使用我的制服(或者我,我认为我这样做)。此外,每次我在stackoverflow或其他网站上遇到与这个问题相关的答案时,他们确实会谈论这个事实,但没有人解释这个问题的替代解决方案,这真的让我很挣扎。它只是为了新的opengl迭代而出现吗?
这是我的顶点着色器代码:
#version 410 core
in vec4 position;
uniform mat4 mvmatrix;
uniform mat4 projmatrix;
void main(void)
{
gl_Position = projmatrix * mvmatrix * position;
}
这是我的片段着色器代码:
#version 410 core
out vec4 color;
void main(void)
{
color = vec4(1.0,1.0,1.0,1.0)
}
和这里是整个程序的整个源代码..现在我没有实现整个代码本身,只有编译程序和着色器的部分,但是,我正在努力获得制服的位置,我已经为此挣扎了好几天…希望有人能在这里拯救我:
codeHere
如果你只需要我谈论的特定部分:
//creating program and shaders, compiling shaders, compiling program
GLchar * v_Shader[] = {
"#version 410 core n"
" n"
"in vec4 position; n"
" n"
" n"
"uniform mat4 mvmatrix; n"
"uniform mat4 projmatrix; n"
" n"
"void main(void) n"
"{ n"
" gl_Position = proj_matrix * mv_matrix * position; n"
"} n"
};
GLchar * f_Shader[] = {
"#version 410 core n"
" n"
"out vec4 color; n"
" n"
"in VS_OUT n"
"{ n"
" vec4 color; n"
"} fs_in; n"
" n"
"void main(void) n"
"{ n"
" color = vec4(1.0,1.0,1.0,1.0) n"
"} n"
};
//creating a opengl program
program = glCreateProgram();
//creating the vertex shader and compiling it
vertexShader = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertexShader, 1, v_Shader, NULL);
glCompileShader(vertexShader);
//creating the fragment shader and compiling it
fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragmentShader, 1, f_Shader, NULL);
glCompileShader(fragmentShader);
//attaching the shaders to the program and linking the program
glAttachShader(program, vertexShader);
glAttachShader(program, fragmentShader);
glLinkProgram(program);
glUseProgram(program);
//getting the program's uniform locations
modelViewMatrixLocation = glGetUniformLocation(program, "mvmatrix");
projectionMatrixLocation = glGetUniformLocation(program, "projmatrix");
不,我不喜欢使用glfw/sdl/glow/freeglut或任何其他库。
你在顶点着色器中拼错了统一名称:
uniform mat4 mvmatrix;
uniform mat4 projmatrix;
...
gl_Position = proj_matrix * mv_matrix * position;
修复,将gl_Position
行替换为
gl_Position = projmatrix * mvmatrix * position;
要在将来捕获类似的错误,请检查shader编译状态:
GLint wasCompiled;
glGetShaderiv( shader, GL_COMPILE_STATUS, &wasCompiled );
GLint logLength;
glGetShaderiv( shader, GL_INFO_LOG_LENGTH, &logLength );
if (logLength > 0)
{
GLchar* log = new GLchar[ (std::size_t)logLength + 1 ];
GLsizei charsWritten = 0;
glGetShaderInfoLog( shader, logLength, &charsWritten, log );
std::cout << std::string( log );
}
你也有一个语法错误在你的片段着色器:
color = vec4(1.0,1.0,1.0,1.0)
在末端缺少;
。你应该检查shader编译错误。
你的片段着色器从顶点着色器输入颜色,但顶点着色器不输出它,你不使用碎片着色器的颜色输入。要进行修复,请删除这些行:
"in VS_OUT n"
"{ n"
" vec4 color; n"
"} fs_in; n"
在注释的最新版本中有一行:
color = vec4(1.0,0.0,0.0.1.0)
有2个错误。您缺少;
, 1.0
之前的字符应该是,
,而不是.
相关文章:
- 没有找到相关文章