OpenGL 扩展问题
OpenGL extension issue
我一直在努力学习 Opengl 的基础知识,遵循这一系列教程:
http://in2gpu.com/2014/12/21/change-triangle-color-opengl-4-5/
因此我正在使用 freeglut 和 glew(版本 1.13)。
我对前几个教程没有任何问题,直到顶点着色器开始使用属性的显式位置。
编译着色器时,我会得到一个 'error : GL_ARB_explicit_attrib_location not supported in this version',即使我要求的上下文是 4.0。
查看我的显卡,我意识到我有两个显卡,并且在我有支持 OpenGL 4.5 的 Radeon R9 M295x 时使用的是性能较弱的英特尔显卡。
然后我将上下文切换到 Opengl 4.3,这次出现了这个错误:
'error #5 : Extension : explicit location is not supported in this version'.
我理解错了什么?我以为我可以在 3.3 或更高版本中使用 GL_ARB_explicit_attrib_location。为什么我不能在第一种情况下?
第二个错误是什么意思?我找不到任何相关信息。
这是上下文创建:
glutInit(&argc, argv);
glutInitContextVersion(4,3);
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowPosition(500, 500);//optional
glutInitWindowSize(800, 600); //optional
glutCreateWindow("OpenGL First Window");
glewExperimental = GL_TRUE;
GLenum err = glewInit();
这是 vao 和 vbo 绑定(顶点包含位置和颜色):
std::vector<Vertex> vertices;
vertices.push_back(Vertex(Vec3f(0.25, -0.25, 0.0), Vec4f(1,0,0,1)));
vertices.push_back(Vertex(Vec3f(-0.25, -0.25, 0.0), Vec4f(0, 1, 0, 1)));
vertices.push_back(Vertex(Vec3f(0.25, 0.25, 0.0), Vec4f(0, 0, 1, 1)));
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(Vertex) * 3, &vertices[0], GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)0);
glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)12);
这是顶点着色器:
#version 430 core
// Input vertex data, different for all executions of this shader.
layout(location = 0) in vec3 in_position;
layout(location = 1) in vec4 in_color
out vec4 color;
void main(){
color = in_color;
gl_Position = vec4(in_position,1);
}
旁注,glew 的文档到底在哪里?似乎无法在网站或 zip 文件夹中找到它,并且键入几个关键字似乎没有产生任何结果。
编辑:如果我根本无法使用此扩展,指向解决方法的指针也很有趣。我还没有完全理解有关链接属性的所有内容。
编辑#2:另一件奇怪的事情是我正在使用的片段着色器显然编译没有问题:
#version 430 core
layout(location = 0) out vec4 out_color; // location specified
in vec4 color;
void main()
{
out_color =color;
}
啊,看来我找到问题了
顶点着色器中缺少一个分号(叹息)并且缺少一个 'out' 属性。
我有两个几乎相同的顶点着色器,似乎我在调试错误的一部分时间,这没有帮助。
这些错误确实不直观,但在这种情况下似乎帮助不大。嗯嗯
我一直在努力学习 Opengl 的基础知识,遵循这一系列教程:
http://in2gpu.com/2014/12/21/change-triangle-color-opengl-4-5/
因此我正在使用 freeglut 和 glew(版本 1.13)。
我对前几个教程没有任何问题,直到顶点着色器开始使用属性的显式位置。
编译着色器时,我会得到一个 'error : GL_ARB_explicit_attrib_location not supported in this version',即使我要求的上下文是 4.0。
查看我的显卡,我意识到我有两个显卡,并且在我有支持 OpenGL 4.5 的 Radeon R9 M295x 时使用的是性能较弱的英特尔显卡。
然后我将上下文切换到 Opengl 4.3,这次出现了这个错误: 'error #5 : Extension : explicit location is not supported in this version'.
我理解错了什么?我以为我可以在 3.3 或更高版本中使用 GL_ARB_explicit_attrib_location。为什么我不能在第一种情况下?
第二个错误是什么意思?我找不到任何相关信息。
这是上下文创建:
glutInit(&argc, argv);
glutInitContextVersion(4,3);
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowPosition(500, 500);//optional
glutInitWindowSize(800, 600); //optional
glutCreateWindow("OpenGL First Window");
glewExperimental = GL_TRUE;
GLenum err = glewInit();
这是 vao 和 vbo 绑定(顶点包含位置和颜色):
std::vector<Vertex> vertices;
vertices.push_back(Vertex(Vec3f(0.25, -0.25, 0.0), Vec4f(1,0,0,1)));
vertices.push_back(Vertex(Vec3f(-0.25, -0.25, 0.0), Vec4f(0, 1, 0, 1)));
vertices.push_back(Vertex(Vec3f(0.25, 0.25, 0.0), Vec4f(0, 0, 1, 1)));
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(Vertex) * 3, &vertices[0], GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)0);
glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)12);
这是顶点着色器:
#version 430 core
// Input vertex data, different for all executions of this shader.
layout(location = 0) in vec3 in_position;
layout(location = 1) in vec4 in_color
out vec4 color;
void main(){
color = in_color;
gl_Position = vec4(in_position,1);
}
旁注,glew 的文档到底在哪里?似乎无法在网站或 zip 文件夹中找到它,并且键入几个关键字似乎没有产生任何结果。
编辑:如果我根本无法使用此扩展,指向解决方法的指针也很有趣。我还没有完全理解有关链接属性的所有内容。
编辑#2:另一件奇怪的事情是我正在使用的片段着色器显然编译没有问题:
#version 430 core
layout(location = 0) out vec4 out_color; // location specified
in vec4 color;
void main()
{
out_color =color;
}
啊,看来我找到问题了
顶点着色器中缺少一个分号(叹息)并且缺少一个 'out' 属性。 我有两个几乎相同的顶点着色器,似乎我在调试错误的一部分时间,这没有帮助。
这些错误确实不直观,但在这种情况下似乎帮助不大。嗯嗯