旧版OpenGL 与 新版OpenGL

分割线:OpenGL3.0。

3.0之前,所有OpenGL版本都与早期版本完全向后兼容。针对OpenGL 1.1编写的代码可以在OpenGL 2.1实现中很好地执行。

 

3.0,引入了废弃functionality的想法。许多OpenGL函数被声明已弃用,这意味着用户应避免使用它们,因为它们可能会从更高版本的API中删除。

 

3.1,OpenGL 3.1删除了OpenGL 3.0中几乎弃用的所有功能。这包括固定功能管道。

    但是,由于许多实现仍然支持那些不推荐使用和已删除的功能,因此某些实现希望能够为更高GL版本的用户提供一种访问旧API的方式。尝试了几种技术,最终将其分为corecompatibility上下文。

    具体说就是,引入了新的扩展名ARB_compatibility。此扩展的存在向用户发出信号,表明已弃用或删除的功能仍然可以通过原始入口点和枚举使用。此种实现的行为由单独的,更大的OpenGL规范定义。因此,存在一个向后兼容的规范和一个非向后兼容的规范。(此时并不存在profile:core&compatibility,只是有这么一个规范)

 

3.2,OpenGL被分为corecompatibility两种配置文件(profile)。核心只需要一种实现来定义,所以并不能保证可获得compatibility。但是大多数实现中,compatibility配置文件是可获得的。

    3.2还引入了新的上下文创建机制,可以返回不同版本的上下文。

 

旧版OpenGL:在2008年,发布了OpenGL规范的3.0版。在此修订版中,固定函数管道以及大多数相关的OpenGL函数和常量已声明为弃用。这些不推荐使用的元素和概念现在通常称为旧式OpenGL。

 

以上参考:

    旧版OpenGL

    OpenGL上下文

 

与此相关的问题:

    1.在GLAD中,为什么没有glBegin?

        把core切换成compatibility即可。

    2.glBegin在哪个版本被废弃?

    3.为什么新版OpenGL的core模式强制使用VAO?而VBO和IBO不能直接渲染?

        The compatibility OpenGL profile makes VAO object 0 a default object. The core OpenGL profile makes VAO object 0 not an object at all. So if VAO 0 is bound in the core profile, you should not call any function that modifies VAO state. This includes binding the `GL_ELEMENT_ARRAY_BUFFER` with glBindBuffer.

        参考:Vertex Specification

    4.VAO出现在哪个版本?

        3.0。可从API中查找函数glGenVertexArrays对应的版本号。

    5.哪个版本强制使用了VAO?

        3.2的core模式。

    6.GLFW+GLAD,如何不使用VAO,而仅使用VBO和IBO进行渲染?

        方法有二:

            1)设置3.1及以前的版本。

            2)设置3.2及以后的版本,并设置glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_COMPAT_PROFILE);向后兼容。

    7.避免使用旧版OpenGL的原因。

        参考:旧版OpenGL

    8.自Ope​​nGL 2.0以来的大多数硬件都缺少实际的固定功能硬件。而是使用系统构建的着色器模拟固定功能的过程。

        参考:固定功能管道

    9.固定渲染管线与立即渲染模式关系。

        两者是一个东西。参考:核心模式与立即渲染模式

    10.既然OpenGL 4.6 都出来了,为什么我们还要学习OpenGL 3.3?

        所有OpenGL的更高的版本都是在3.3的基础上,引入了额外的功能,并没有改动核心架构。新版本只是引入了一些更有效率或更有用的方式去完成同样的功能。

        详见核心模式与立即渲染模式

    11.立即模式(immediate mode) 与 保留模式(retained-mode)。

        参考:

            What does “immediate mode” mean in OpenGL?

            Immediate mode 

            Retained mode

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(openGL)