我一直在按照这个入门指南画一个三角形 -
http://www.glfw.org/docs/latest/quick.html
只要opengl版本为3.1或更低(使用glfwWindowHint),这个东西就能正常工作。对于3.2及更高版本,我得到的是黑屏,没有三角形。
我在3.3 - >
的着色器中进行了以下修改orderBy
也没有错误。你能告诉我这里做错了什么吗?
注意:我正在使用glew。
注2:我的GPU通过了GLview for 3.2和3.3的渲染测试。
答案 0 :(得分:0)
如果使用Core Profile 3.2+,则GLFW文档中引用的示例使用默认的顶点阵列对象(VAO)。在some driver implementations中,这意味着对glVertexAttribPointer
的调用将失败:
默认顶点数组对象 (名称为零)也已弃用。否时调用VertexAttribPointer 缓冲区对象或未绑定任何顶点数组对象将生成INVALID_- 操作错误,因为没有顶点时将调用任何数组绘制命令 数组对象已绑定。
在3.2+ Core Profiles中使用VAO的一种方法是创建并使用单个VAO实例来替换“名称为零”的默认VAO:
GLuint vao;
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
glGenBuffers(1, &vertex_buffer);
glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
// proceed as normal
最好在清理时使用glDeleteVertexArrays(1, &vao);
删除VAO。可以在here中找到有关顶点数组对象的更多信息。