所以我已经查看了有关保留与立即模式渲染的问题列表,但似乎没有人指定图形API(OpenGL / DirectX)存储的场景数据是存储在RAM中还是存储在GPU上#&# 39;记忆。常识告诉我,API会将场景数据存储到GPU上,但我在网上看到的并没有直接指明这一点。这是因为它取决于API中的设置吗?
为了清楚起见,我的问题如下:在保留模式图形中,场景数据是否总是存储在GPU的内存中,还是依赖于图形API中的某些设置?
答案 0 :(得分:1)
在现代OpenGL中。您将数据像顶点一样存储在某个数组中,该数组存储在CPU内存(RAM)中。当我做这样的事情时
void* memory = glMapBuffer(...);
这将返回设备驱动程序区域内存的句柄。
因此,您将数据直接复制到设备驱动程序内存,您可以避免本地数据副本。
稍后设备驱动程序会将此数据移动到图形内存。
根据您的设置GL_STATIC_DRAW
,GL_DYNAMIC_DRAW
设备驱动程序决定应选择哪个内存(GPU或CPU)以及如何对齐数据以实现最佳访问。
所以有些立即模式(OpenGL)
如果你看到旧版本的OpenGL有一些叫做显示列表的东西。 您只需编写一次几何体并将其编译到显示列表中,并且只要您想绘制,只需使用预编译代码。所以保留了一些功能。
在像WPF这样的纯保留模式API中,所有主要工作负载(如初始化,生命周期管理)都是通过API完成的,因此您几乎无法控制此调整,因此它依赖于API来放置数据以进行优化访问。