我如何使用最新的OpenGL?

Blu*_*lub 11 c++ opengl

这是一个很新的主题,在大学里我们每次需要时都会得到.dll.但我从来不知道我使用的是什么实际版本,我正在使用哪些扩展......说实话,这非常令人困惑.我在官方khronos网站上找不到任何下载链接.单击OpenGL SDK链接,只会向我提供更多文档.我已经习惯了DirectX,这很清楚你正在使用什么版本.(通过您创建的设备).

  1. 我今天如何开始使用OpenGL 4.0?
  2. 我如何启用扩展程序?
  3. 我如何知道我的机器能够使用哪种版本的OpenGL?
  4. 4.0中有什么大变化吗?我认为我不需要关心旧版本,因为我将OpenGL纯粹用于教育目的至少还有2年.

Tom*_*a17 11

OpenGL不是具有不同版本号的库,等等.相反,它是图形驱动程序必须自己支持的一个重要标准.因此,某些显卡可能不支持最新的OpenGL版本,而将来某些显卡可能不支持旧版本.

如果使用OpenGL 1.0或使用OpenGL 4.0,则无需在不同的库中包含不同的标题或链接.但是,要使用OpenGL 4.0,您必须检测程序运行的计算机是否支持它.目前,只有非常新的GPU支持OpenGL 4.0.你可能有更好的机会使用OpenGL 3.0

如果你在Windows上,请包含"gl/gl.h"并将程序与"OpenGL32.lib"链接

程序启动后,您可以检测GPU支持的OpenGL版本,或使用glString和wglGetProcAddress启用扩展.但是我强烈建议您使用第三方库(我最喜欢的是GLee).

使用OpenGL进行编程与使用DirectX进行编程完全不同.DirectX保证支持您正在使用的版本的所有功能.当您使用OpenGL编写代码时,您应该单独检测每个功能.

例如,假设您要使用顶点缓冲区.你的代码应该是这样的:

  • 如果OpenGL版本> = 2,则使用glGenBuffers,glBindBuffer等.
  • 否则,在RAM中分配和填充数据

您可以在我上面链接的GLee页面中看到一些示例

当然,你无法做到这一切.例如,着色器无法在没有特定扩展名的情况下完成,如果它们不可用,您应该只显示错误消息.

更复杂:从OpenGL 3开始,一些函数已被弃用.您现在有两种方法来初始化OpenGL:

  • 新方法(Windows上的wglCreateContextAttribsARB),您可以在其中精确定制所需的最小OpenGL版本
  • 请求最少OpenGL 1.1的旧方式(wglCreateContext)(最近的版本也可以访问)

如果您请求的版本优于OpenGL 3,则理论上只能使用已弃用的功能,这要归功于卡可能支持或不支持的扩展ARB_compatibility.目前,所有现有GPU都支持ARB_compatibility,但将来可能不再如此.

如果您请求的版本低于OpenGL 3,则不会将这些函数视为已弃用,但如果卡不再支持这些函数,初始化将失败.