说 OpenGL 3.2+ 核心配置文件基于 "retained mode" 模式是否正确?

Is it correct to say that OpenGL 3.2+ core-profile is based on "retained mode" pattern?

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

如果旧的 OpenGL 版本 (< 3.0) 使用即时模式让用户(应用程序)描述场景的构建,而较新的版本 (>= 3.0) 试图通过使用 VBO 和着色器作为从中抽象出来描述图形的唯一方法,说 OpenGL 3.2+ 中的核心配置文件使 OpenGL 库基于保留模式模式是否正确,因为 VBO 数据不是由用户(应用程序)存储的,其中不允许描述如何构建场景?

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

因此,在 OpenGL 3.2+ 中,核心配置文件基于保留模式,而兼容性配置文件是即时模式和保留模式功能的混合,这样说是否正确?

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

如有任何不准确或含糊之处,请随时指出。

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

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

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

话虽这么说,即使教程在术语上也相当宽松,因为它声称“立即模式”是“固定功能管道”的同义词。它不是。固定功能可以使用存储在缓冲区对象中的数据;实际上,缓冲区对象是 added to OpenGL before shaders.

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