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?的主要内容,如果未能解决你的问题,请参考以下文章