【发布时间】:2011-08-29 04:59:13
【问题描述】:
我正在将旧的 openGL 代码(即时模式)迁移到 Vertext-Buffer-Objects。 我意识到我需要为此使用 OpenGL3 API 调用 (GL_ARB_vertex_buffer_object)。 所以我打算使用 GLEW 作为扩展加载库。
我的问题是,有没有一种特殊的方法来为 OpenGL3 contexT 初始化 QGLWidget?
【问题讨论】:
我正在将旧的 openGL 代码(即时模式)迁移到 Vertext-Buffer-Objects。 我意识到我需要为此使用 OpenGL3 API 调用 (GL_ARB_vertex_buffer_object)。 所以我打算使用 GLEW 作为扩展加载库。
我的问题是,有没有一种特殊的方法来为 OpenGL3 contexT 初始化 QGLWidget?
【问题讨论】:
“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 或更高版本。
【讨论】:
glGenBuffers,而不是扩展名中的glGenBuffersARB。