说 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+ 中,核心配置文件基于保留模式,而兼容性配置文件是即时模式和保留模式功能的混合,这样说是否正确?
我对立即模式和保留模式定义的理解:
立即模式是一种API设计模式,其特点是应用程序直接调用渲染函数,每一帧显示的对象都是从头开始绘制的用户传递给渲染器的数据。
保留模式是一种API设计模式,其特点是应用程序描述了应该在场景中渲染的对象,而无需直接调用渲染函数——图形库负责显示和转换显示对象的数据。
如有任何不准确或含糊之处,请随时指出。
根据您所说的这些定义,OpenGL 不是“保留模式”。您的定义要求在“保留的”渲染器中“不直接调用渲染函数”进行渲染。但是 OpenGL 本身不渲染任何东西;您必须在每一帧中直接调用渲染命令才能进行渲染。
缓冲区对象只是一种将数据存储在 GPU 直接可访问的内存中的方法。它们并没有真正改变用户与渲染概念交互方式的本质。如果你想渲染那些缓冲区代表的对象,你仍然必须告诉 OpenGL 使用一些缓冲区缓冲区来渲染。
需要注意的是,OpenGL 社区专门使用术语“立即模式”,仅指使用基于 glBegin/End
的顶点规范。它没有按照您定义的方式使用该术语。事实上,本教程花时间解释了该术语在 OpenGL 上下文中的含义:“使用 OpenGL 意味着在即时模式下进行开发(通常称为固定功能管道)”。
话虽这么说,即使教程在术语上也相当宽松,因为它声称“立即模式”是“固定功能管道”的同义词。它不是。固定功能可以使用存储在缓冲区对象中的数据;实际上,缓冲区对象是 added to OpenGL before shaders.
所以最好不要对术语考虑太多。
我目前正在通过 this resource 学习 OpenGL,“核心配置文件与即时模式”一章让我对下一个问题感到困惑。
如果旧的 OpenGL 版本 (< 3.0) 使用即时模式让用户(应用程序)描述场景的构建,而较新的版本 (>= 3.0) 试图通过使用 VBO 和着色器作为从中抽象出来描述图形的唯一方法,说 OpenGL 3.2+ 中的核心配置文件使 OpenGL 库基于保留模式模式是否正确,因为 VBO 数据不是由用户(应用程序)存储的,其中不允许描述如何构建场景?
我也无法理解 - 在 OpenGL 1.4(也许是 1.5,我还不确定)中添加 VBO 是否会使这些规范基于保留模式?
因此,在 OpenGL 3.2+ 中,核心配置文件基于保留模式,而兼容性配置文件是即时模式和保留模式功能的混合,这样说是否正确?
我对立即模式和保留模式定义的理解:
立即模式是一种API设计模式,其特点是应用程序直接调用渲染函数,每一帧显示的对象都是从头开始绘制的用户传递给渲染器的数据。
保留模式是一种API设计模式,其特点是应用程序描述了应该在场景中渲染的对象,而无需直接调用渲染函数——图形库负责显示和转换显示对象的数据。
如有任何不准确或含糊之处,请随时指出。
根据您所说的这些定义,OpenGL 不是“保留模式”。您的定义要求在“保留的”渲染器中“不直接调用渲染函数”进行渲染。但是 OpenGL 本身不渲染任何东西;您必须在每一帧中直接调用渲染命令才能进行渲染。
缓冲区对象只是一种将数据存储在 GPU 直接可访问的内存中的方法。它们并没有真正改变用户与渲染概念交互方式的本质。如果你想渲染那些缓冲区代表的对象,你仍然必须告诉 OpenGL 使用一些缓冲区缓冲区来渲染。
需要注意的是,OpenGL 社区专门使用术语“立即模式”,仅指使用基于 glBegin/End
的顶点规范。它没有按照您定义的方式使用该术语。事实上,本教程花时间解释了该术语在 OpenGL 上下文中的含义:“使用 OpenGL 意味着在即时模式下进行开发(通常称为固定功能管道)”。
话虽这么说,即使教程在术语上也相当宽松,因为它声称“立即模式”是“固定功能管道”的同义词。它不是。固定功能可以使用存储在缓冲区对象中的数据;实际上,缓冲区对象是 added to OpenGL before shaders.
所以最好不要对术语考虑太多。