在OpenGL 2.1机器上学习OpenGL 3.3?

我将学习OpenGL 3.3而不是OpenGL 2.1,因为许多OpenGL 2.1的模型已经被弃用了(基于这个信息 )。 很遗憾我的“老朋友”只支持OpenGL 2.1。

基于这篇文章在learnopengl.com我发现,从OpenGL 2.1到OpenGL 3.3是Khronos Group的一个巨大的跳跃,如果我在OpenGL 2.1机器上运行OpenGL 3.3函数,我会收到错误。

1)是否有可能在OpenGL 2.1机器上学习OpenGL 3.3?

2) 有关 7年前的这个问题 ,今天学习OpenGL 2.1是无用的吗?

谢谢!

你绝对可以用现代的OpenGL风格编写代码,同时限制自己使用OpenGL 2.1(或更低版本)的调用

所有你需要做的就是避免使用被标记为不赞成使用的调用或特性,通常(对于OpenGL 2.1)意味着对所有的绘图使用着色器和顶点缓冲区。

这没关系,因为着色器和顶点缓冲区不是现代的OpenGLfunction 。 它们实际上是非常古老的特性,着色器在OpenGL 2.0中是核心的(在此之前可以作为扩展使用),顶点缓冲区甚至更老 ,在OpenGL 1.5中是核心的,同样可以在之前作为扩展使用。

其他不建议使用的function,包括使用内置的matrix堆栈和内置的GLSLinput制服和属性,但也是可以的,因为即使OpenGL 2.0也一直支持替代它们:使用自己的matrix库并提供自己的制服和属性。

所以举个例子,以下是完全有效的OpenGL 2.1代码:

glBindBuffer (...); glEnableVertexAttribArray (...); glVertexAttribPointer (...); glUseProgram (...); glUniformMatrix4fv (...); glDrawArrays (...); 

一些GL 3.0+的function,你可能会(可能;他们可能会作为扩展)不能使用包括:

  • 几何着色器。
  • 实例化。
  • 统一的缓冲区对象。
  • 取样器对象。
  • 浮点纹理格式。
  • Framebuffer对象。

这也是可以的,因为没有什么关于OpenGL 3.3 需要你使用这些。


作为替代,软件的实现确实存在,但是我个人认为它们不适合GameDev的工作。