核心模式和立即渲染模式

​ 早期的OpenGL使用立即渲染模式(Immediate mode,也就是固定渲染管线),这个模式下绘制图形很方便。OpenGL的大多数功能都被库隐藏起来,开发者很少有控制OpenGL如何进行计算的自由。而开发者迫切希望能有更多的灵活性。随着时间推移,规范越来越灵活,开发者对绘图细节有了更多的掌控。立即渲染模式确实容易使用和理解,但是效率太低。因此从OpenGL3.2开始,规范文档开始废弃立即渲染模式,并鼓励开发者在OpenGL的核心模式(Core-profile)下进行开发,这个分支的规范完全移除了旧的特性。

核心模式(Core Profile)与立即渲染模式(Immediate Mode)的区别

特性核心模式 (Core Profile)立即渲染模式 (Immediate Mode)
编程模型面向数据(Data-Oriented):先准备数据,后发送指令。面向过程(Procedural):一边发送数据,一边发送指令。
性能极高。 数据预处理和批处理能力强。极低。 每次调用都会导致大量的 CPU/GPU 通信。
数据组织数据必须存储在 VBO/VAO (显存对象)中。顶点数据在每次绘制时通过 CPU 即时发送。
状态管理使用 可编程渲染管线(Programmable Pipeline),所有状态(变换、光照、材质)由 Shader 控制。使用 固定功能渲染管线(Fixed-Function Pipeline),通过 glMatrixMode()、glLight() 等 API 调用设置状态。
兼容性现代标准。移除所有旧 API,是主流 GPU 架构和驱动程序的原生模式。已弃用。在 OpenGL 3.1+ 版本中被移除,不支持现代 GPU 功能。
主要 APIglGenBuffers(), glBufferData(), glVertexAttribPointer(), Shader。glBegin(), glVertex(), glEnd()。

核心模式 (Core Profile)

​ 这是 OpenGL 的现代模式(OpenGL 3.1+ 引入,当前主流)。它彻底放弃了易用性优先的旧思想,转而拥抱高性能。

  • 工作方式:
    1. 数据准备: 将所有顶点、颜色、法线等数据打包,一次性上传到 GPU 内存中的 VBO(顶点缓冲对象) 和 VAO(顶点数组对象)。
    2. 可编程管线(Shader): 开发者使用 GLSL(OpenGL Shading Language)编写 着色器(Shaders)。着色器是运行在 GPU 上的小程序,它定义了顶点如何变换(如旋转、投影)以及像素如何着色(如光照计算、纹理采样)。
    3. 批量绘制: 只需调用一次 glDrawArrays() 或 glDrawElements(),GPU 就可以访问它自己的内存中的数据,并行地绘制成千上万的顶点。这大大减少了 CPU 的工作量。
  • 高性能优势: 通过将数据和渲染逻辑(Shader)推向 GPU,核心模式极大地减少了 Draw Call 的数量和驱动程序的负担,从而释放了 CPU 资源,并充分发挥了现代 GPU 的并行处理能力。