保留模式数据是否存储在 GPU 上?
Is retained mode data stored on the GPU?
所以我已经浏览了关于保留模式渲染与立即模式渲染的问题列表,但似乎没有人指定图形 API (OpenGL/DirectX) 存储的场景数据是否存储到RAM 或 GPU 的内存。常识告诉我 API 会为您将场景数据存储到 GPU 上,但我在网上看到的任何内容都没有直接说明这一点。这是因为它取决于 API 中的设置吗?
澄清一下,我的问题如下:在保留模式图形中,场景数据是否始终存储在 GPU 的内存中,还是取决于图形中的某些设置API?
在现代 OpenGL 中。您将数据像顶点一样存储在某个数组中,该数组存储在 CPU 内存 (RAM) 中。当我这样做时
void* memory = glMapBuffer(...);
这个 returns 我处理设备驱动程序区域中的内存。
因此,您将数据直接复制到设备驱动程序内存,可以避免数据的本地复制。
稍后设备驱动程序会将此数据移动到图形内存。
根据您的设置,例如 GL_STATIC_DRAW
、GL_DYNAMIC_DRAW
设备驱动程序决定应选择哪个内存(GPU 或 CPU)以及应如何对齐数据以实现最佳访问。
那么一些立即模式的作用 (OpenGL)
如果你看到旧版本的 OpenGL 有一个叫做显示列表的东西。
您只需要编写一次几何并将其编译到显示列表中,无论何时您想要绘制只需使用预编译代码。所以保留了一些功能。
在纯保留模式下 API`s 像 WPF 所有主要工作负载,如初始化,生命周期管理由 API 完成,因此您几乎无法控制这种调整,因此它取决于API 在那里放置数据以优化访问。
所以我已经浏览了关于保留模式渲染与立即模式渲染的问题列表,但似乎没有人指定图形 API (OpenGL/DirectX) 存储的场景数据是否存储到RAM 或 GPU 的内存。常识告诉我 API 会为您将场景数据存储到 GPU 上,但我在网上看到的任何内容都没有直接说明这一点。这是因为它取决于 API 中的设置吗?
澄清一下,我的问题如下:在保留模式图形中,场景数据是否始终存储在 GPU 的内存中,还是取决于图形中的某些设置API?
在现代 OpenGL 中。您将数据像顶点一样存储在某个数组中,该数组存储在 CPU 内存 (RAM) 中。当我这样做时
void* memory = glMapBuffer(...);
这个 returns 我处理设备驱动程序区域中的内存。
因此,您将数据直接复制到设备驱动程序内存,可以避免数据的本地复制。
稍后设备驱动程序会将此数据移动到图形内存。
根据您的设置,例如 GL_STATIC_DRAW
、GL_DYNAMIC_DRAW
设备驱动程序决定应选择哪个内存(GPU 或 CPU)以及应如何对齐数据以实现最佳访问。
那么一些立即模式的作用 (OpenGL)
如果你看到旧版本的 OpenGL 有一个叫做显示列表的东西。 您只需要编写一次几何并将其编译到显示列表中,无论何时您想要绘制只需使用预编译代码。所以保留了一些功能。
在纯保留模式下 API`s 像 WPF 所有主要工作负载,如初始化,生命周期管理由 API 完成,因此您几乎无法控制这种调整,因此它取决于API 在那里放置数据以优化访问。