OpenGL扩展问题
OpenGL extension issue
我一直在尝试学习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时,我使用的是功能较弱的英特尔显卡。
然后我将上下文切换到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;
}
啊,好像我发现问题了。
顶点着色器中缺少分号(叹息),缺少"out"属性。我有两个几乎相同的顶点着色器,而且似乎有一段时间我调试错了一个,这没有帮助。
这些错误确实是不直观的,在这种情况下似乎没有多大帮助。啊,好吧。
- HDF5Cpp 扩展复合数据集超板问题
- MSVC中的宏观扩展问题
- OpenMP 的扩展问题
- 使用 C++17 扩展使用声明时出现问题
- 扩展中的日期时间对象方法C++问题
- C 寿命扩展的问题
- Visual Studio中变异模板扩展的问题
- 参数包扩展问题
- 扩展现有的 Spirit 语法(AST 和 skipper 的问题)
- 扩展类c++的循环包含问题
- linux中的C++GLFW3全屏扩展问题
- MFC扩展dll资源加载问题
- 使用 python 扩展在 gdb 中打印特征类型时出现问题
- 覆盖使用模板参数包扩展声明的虚拟方法时遇到问题
- 在 Python 中扩展的 C++ 类中的 Seg 错误回调问题
- 跟随包扩展有什么问题?
- C++ python 扩展数组大小问题 (C2133)
- C++在 Ruby C 扩展中,指针问题
- C++ 宏扩展的一个问题
- 节点扩展问题