保存在GPU上的模式数据是?
因此,我已经通过关于保留与立即模式渲染的问题列表,但似乎没有人指定图形API(OpenGL/DirectX)存储的场景数据是存储在RAM中还是存储在GPU内存中。常识告诉我,API会将场景数据存储到GPU上,但我没有在线看过直接指定的数据。这是因为它取决于API中的设置?保存在GPU上的模式数据是?
只是要清楚,我的问题如下:在保留模式图形中,场景数据是否总是存储在GPU的内存中,还是取决于图形API中的某些设置?
在现代的OpenGL中。您可以将数据存储在CPU内存(RAM)中,将数据存储为一些数组中的顶点。当我这样做一些这样的
void* memory = glMapBuffer(...);
这会返回我处理设备驱动程序区域中的内存。 因此,您将数据直接复制到设备驱动程序内存,并且可以避免本地数据复制。后来在设备驱动程序将此数据移动到图形内存。 取决于您的设置,如GL_STATIC_DRAW
,GL_DYNAMIC_DRAW
设备驱动程序决定选择哪个内存(GPU或CPU)以及如何对齐数据以实现最佳访问。 所以一些什么样的立即模式(OpenGL)
如果你看到旧版本的OpenGL有一些称为显示列表。 如果您只编写一次几何图形并将其编译到显示列表中,并且只要使用预编译代码即可绘制。所以一些保留的功能在那里。
在纯保留模式API中,比如WPF,所有主要工作负载(如初始化),生命周期管理均由API完成,因此您几乎不能控制此调整,因此它取决于API,它将数据放在优化访问。
我没有说GPU内存。如果你仔细阅读,我会提到驱动程序的内存。当驱动程序将其移至GPU时,与实现相关,而不是由OpenGL确定。但直接在驱动程序内存中获取内容仍然是优化的一个步骤。 –
感谢您输入完成编辑。 –
它绝对取决于API。据我所知,甚至没有保证任何保留模式API都使用GPU进行绘图。 – BDL
因此,在现代OpenGL中**默认**,如果存在GPU,OpenGL是否总是在GPU上存储所有场景数据? (当然在保留模式下,因为立即模式不存在于新版本中) – pIjIN
它可能会将其存储在GPU内存中。除非实现决定将其存储在CPU内存中更好(例如,当数据映射到CPU内存或GPU内存已满时)。 – BDL