QT OpenGL,顶点缓冲区对象和 GLEW?

Posted

技术标签:

【中文标题】QT OpenGL,顶点缓冲区对象和 GLEW?【英文标题】:QT OpenGL ,Vertex Buffer Object and GLEW? 【发布时间】:2011-08-29 04:59:13 【问题描述】:

我正在将旧的 openGL 代码(即时模式)迁移到 Vertext-Buffer-Objects。 我意识到我需要为此使用 OpenGL3 API 调用 (GL_ARB_vertex_buffer_object)。 所以我打算使用 GLEW 作为扩展加载库。

我的问题是,有没有一种特殊的方法来为 OpenGL3 contexT 初始化 QGLWidget?

【问题讨论】:

【参考方案1】:

“OpenGL 3 上下文”是什么意思?

您可以通过正常的上下文创建获得对 3.1 或更高版本的 OpenGL 支持。现在,如果你想要一个core OpenGL context,它实现了核心规范,那么你必须做一些工作。

请注意,兼容性上下文非常好。它仍然可以完成核心上下文所做的一切;您没有必须执行以下任何操作来使用缓冲区对象。

哦,缓冲区对象不再是扩展。使用核心函数,而不是你在GL_ARB_vertex_buffer_object 中看到的扩展函数。

注意:以下适用于 QT 4.7 或更高版本:

您必须至少对QGLFormat 有一定的了解;您需要一个才能创建QGLWidget。只需使用QGLFormat::CoreProfile 在该对象上调用QGLFormat::setProfile

遗憾的是,QT 不允许您指定特定版本。但这应该足以获得核心 OpenGL 配置文件,假设您的硬件实现 OpenGL 3.2 或更高版本。

【讨论】:

你说要为 BufferObjects 使用核心函数。但是,我仍然必须使用 GLEW 对吗?我的意思是,Windows7 附带的普通 gl.h 没有这些 API 调用,对吗? @umanga:您不必专门使用 GLEW。但是您确实需要从 OpenGL 加载函数指针,而 GLEW 会这样做。我是说使用glGenBuffers,而不是扩展名中的glGenBuffersARB 感谢您的回答。我想我搞错了。我真的不需要 OpenGL3 支持 VBO 对象吗? @unmanga:不,你没有。顶点缓冲对象作为一个扩展已经存在了很长一段时间了。该扩展是针对 OpenGL-1.4 编写的。 @umanga:该扩展在 GL 1.5 中被采用到核心中,因此长期以来它一直是 OpenGL 的一部分。

以上是关于QT OpenGL,顶点缓冲区对象和 GLEW?的主要内容,如果未能解决你的问题,请参考以下文章

Eclipse CDT 编辑器无法识别 OpenGL 扩展

OpenGL ES 渲染立体图形

自定义 OpenGL 缓冲区类不显示任何内容

OpenGL复制顶点缓冲区对象

OpenGL顶点数组对象不记录VBO和IBO绑定

OpenGL 顶点数组对象是存储顶点缓冲区名称和索引,还是只存储索引?