我将学习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,你可能会(可能;他们可能会作为扩展)不能使用包括:
这也是可以的,因为没有什么关于OpenGL 3.3 需要你使用这些。
作为替代,软件的实现确实存在,但是我个人认为它们不适合GameDev的工作。