对openGL版本感到困惑

kin*_*and 2 c++ opengl

我更新了我的显卡驱动程序以支持openGL 4,因此像glBegin这样的弃用函数不会工作.但是,当我运行一个简单的三角形程序时,glBegin仍然像以前一样工作.glBegin仍然支持openGL 4,还是我错过了升级到openGL 4的一些步骤?

And*_*man 5

仅使用支持OpenGL 4.x的驱动程序并不意味着您将失去早期版本的功能.从OpenGL 3.2开始,引入了核心兼容性配置文件的概念,这就是现代和被弃用之间的分离实际发挥作用的地方.

Core配置文件中,您提到glBegin的内容无效.但是,在兼容性配置文件中,您可以继续将已弃用的API部分与新部件混合使用.绝大多数新的OpenGL功能都不能保证与API的弃用部分一起使用,这在很大程度上是因为大多数新功能都以某种方式与GLSL和可编程管道相关.

现在,当你讨论像Mac OS X这样的平台时,事情变得有点复杂.从OS X 10.7开始,Apple开始支持OpenGL 3.2.但是,他们以这样一种方式设计他们的实现,即访问OpenGL 3.2功能的唯一方法是获取Core配置文件.他们继续支持传统的OpenGL 2.1实现让老软件不必重新编写,但为了采取任何的OpenGL 3.2以上版本的OS X功能的优势,你必须forefit所有否决的功能.


实际上,平台通常是为了获得Core配置文件而设计的,因此您实际上必须在上下文创建期间执行额外的工作.除非您特别请求Core,否则您将获得兼容性(或者在OS X的情况下,OpenGL 2.1的实现).这是使整个弃用模型尽可能轻松地用于现有软件的一种方式.