【问题标题】:How did I just use an OpenGL 3 feature in a 1.1 context?我是如何在 1.1 上下文中使用 OpenGL 3 功能的?
【发布时间】:2014-10-20 12:06:04
【问题描述】:

几周前我刚开始使用 OpenGL 编程,正如人们向我建议的那样,我使用 GLFW 作为我的窗口处理程序。我还使用 GLEW 作为我的扩展处理程序。所以我经历了用三个点制作一个顶点缓冲区来绘制一个三角形并将它传递给 OpenGL 来绘制它的整个过程,然后我编译并运行。没有绘制三角形,大概是因为我没有任何着色器。所以我对自己说“我为什么不通过使用 GLFW 创建上下文来降低我的 OpenGL 版本?”我做到了。从 OpenGL 3.3 到 1.1,当然,有一个三角形。成功了,我想。然后我记得有一篇文章说顶点缓冲区只在 OpenGL 3 中引入,那么我怎么可能在 1.1 上下文中使用 OpenGL 3 功能?

【问题讨论】:

  • 没有代码,我猜你已经用glfwWindowHint设置了OpenGL版本。之后你有没有用glfwGetWindowAttrib检查过实际版本?
  • 正确,我已经使用glfwWindowHint设置上下文版本主要和次要,没有我没有检查。

标签: opengl glfw glew


【解决方案1】:

图形驱动程序可以免费为您提供与您请求的版本不同的上下文,只要它们兼容。例如,即使您请求 v1.1 上下文,您也可能会获得 v3.0 上下文,因为 OpenGL 3.0 不会更改或删除 OpenGL 1.1 的任何功能。

此外,OpenGL 版本之间的唯一区别通常是 GPU 必须支持哪些扩展。如果您有 v1.1 上下文但支持 ARB_vertex_buffer_object,那么您仍然可以使用 VBO(尽管您可能需要将 ARB 后缀附加到函数名称)。

【讨论】:

  • 谢谢,这说明了很多。当您说我必须将 ARB 作为后缀附加到函数名称时,为什么我必须这样做?如果我不这样做会怎样?
  • 扩展函数有后缀(通常是ARBEXT)以区别于核心函数。扩展功能与其对应的核心功能通常没有区别,但并非所有扩展都已添加到核心中。
猜你喜欢
  • 1970-01-01
  • 2012-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多