OpenGL扩展问题

时间:2015-11-25 18:20:41

标签: c++ opengl glew freeglut

按照这一系列教程,我一直在尝试学习Opengl的基础知识:

http://in2gpu.com/2014/12/21/change-triangle-color-opengl-4-5/

因此我使用freeglut和glew(版本1.13)。

前几个教程没有问题,直到顶点着色器开始使用属性的显式位置。

编译着色器时,我会收到错误:此版本不支持GL_ARB_explicit_attrib_location,即使我要求的上下文是4.0。

看着我的显卡,我意识到我有两个并且在使用支持OpenGL 4.5的Radeon R9 M295x时使用功能较弱的Intel。

然后我将上下文切换到Opengl 4.3,这次出现了这个错误: '错误#5:扩展:此版本不支持显式位置'。

我的错误理解是什么?我以为我可以使用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;
}

1 个答案:

答案 0 :(得分:0)

啊,似乎我发现了这个问题。

在顶点着色器(叹气)中出现了一个分号错误,并且出现了一个&#39; out&#39;属性缺失。 我有两个几乎相同的顶点着色器,似乎我正在调试错误的一部分时间,这没有帮助。

这些错误确实不直观,但在这种情况下似乎没什么帮助。好吧。