对openGL版本感到困惑

时间:2013-12-19 01:59:39

标签: c++ opengl

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

2 个答案:

答案 0 :(得分:5)

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

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

现在,当你讨论像Mac OS X这样的平台时,事情变得有点复杂。从OS X 10.7开始,Apple开始支持OpenGL 3.2。但是,他们设计的实现方式是 ONLY 访问OpenGL 3.2功能的方式是获得 Core 配置文件。他们继续支持传统的OpenGL 2.1实现,因此不必重写旧软件,但为了利用OS X上的任何OpenGL 3.2+功能,您必须预先设置所有已弃用的功能。


事实上,平台的设计通常是为了在上下文创建过程中实际上必须执行额外工作才能获得核心配置文件。除非您特别要求核心,否则您将获得兼容性(或者在OS X的情况下,是OpenGL 2.1的实现)。这是一种使整个弃用模型尽可能轻松地用于现有软件的方法。

答案 1 :(得分:2)

“弃用”并不一定意味着“它不会起作用”,它意味着“你不应该使用它,因为标准是这样说的”,供应商可以自由地实现它想要用硬件销售的东西;许多品牌仍然在他们自己的库中提供已弃用的OpenGL上下文和函数。