OpenGL 3.2+ core-profile 基于“保留模式”模式是否正确?

CoS*_*der 3 opengl

我目前正在通过此资源学习 OpenGL ,“核心配置文件与立即模式”一章让我对下一个问题感到困惑。

如果旧的 OpenGL 版本 (< 3.0) 使用立即模式让用户(应用程序)描述场景的构建,而较新的版本 (>= 3.0) 尝试通过使用 VBO 和着色器作为描述图形的唯一方式来从中抽象,是否正确地说 OpenGL 3.2+ 中的 core-profile 使 OpenGL 库基于保留模式模式,因为 VBO 数据不是由用户(应用程序)存储的,因此不让描述如何构建场景?

我也无法理解 - 在 OpenGL 1.4(也许是 1.5,我还不确定)中添加 VBO 是否会使这些规范基于保留模式?

那么,在 OpenGL 3.2+ 中,核心配置文件基于保留模式,兼容性配置文件是立即模式和保留模式功能的混合,这是否正确?

我对立即模式和保留模式定义的理解:

  • 立即模式是一种API设计模式,其特点是应用程序直接调用渲染函数,并且每个显示有对象的帧都是根据用户传递给渲染器的数据从头开始绘制的。

  • 保留模式是一种API设计模式,其特点是应用程序描述场景中应该渲染的对象,而不需要直接调用渲染函数——图形库负责显示和转换所显示对象的数据。

请随意指出任何不准确或含糊之处。

Nic*_*las 5

使用您所讨论的这些定义,OpenGL 不是“保留模式”。您的定义要求在“保留”渲染器中“不直接调用渲染函数”进行渲染。但 OpenGL 本身并不渲染任何东西;它是由 OpenGL 渲染的。您必须在每一帧直接调用渲染命令才能进行渲染。

缓冲区对象只是将数据存储在 GPU 可以直接访问的内存中的一种方式。它们并没有真正改变用户与渲染概念交互的本质。如果你想渲染这些缓冲区代表的对象,你仍然必须告诉 OpenGL 使用一些缓冲区进行渲染。

应该注意的是,OpenGL 社区专门使用术语“立即模式”,并且仅指使用glBegin/End基于顶点规范。它使用该术语的方式与您定义它的方式不同。事实上,本教程花了很多时间来解释该术语在 OpenGL 上下文中的含义:“使用 OpenGL 意味着以立即模式进行开发(通常称为固定功能管道)”。

话虽如此,即使本教程的术语也相当宽松,因为它声称“立即模式”与“固定功能管道”同义。但事实并非如此。固定功能可以使用存储在缓冲区对象中的数据;事实上,缓冲区对象是在着色器之前添加到 OpenGL 中的

所以最好不要对术语考虑太多。

  • @CoSalamander:是的,谈论OpenGL时的“立即模式”与imGUI库等“立即模式”不同。 (2认同)