在OpenGL ES中将数据“发送”到GPU的概念

时间:2016-12-28 19:39:50

标签: mobile graphics opengl-es gpu

在桌面计算机上只使用过Direct3D和OpenGL,我脑子里有这个概念,每当需要更新缓冲区时,你需要通过glBufferData()/ glBufferSubData()等调用将这些数据发送到GPU,应该不惜一切代价减少这类事情。

由于OpenGL ES适用于手机等嵌入式系统,而我认为没有专用GPU RAM的设备,我想知道如果在一台设备(Android)和另一台设备上编译,这样的API调用是否完全不同设备(Windows台式计算机)。无论是在OpenGL还是OpenGL ES上,这些调用都是相同或类似的,我想知道如果我在Windows上编写程序,它将在移动设备上运行。我的猜测是,在移动设备上,这些函数调用会将数据加载到系统RAM中,而在桌面上,如果GPU可用,它将被发送到GPU RAM。

如果是这种情况,那么移动设备的优势在于,数据只保存在一个地方,而不会发送到其他地方(即发送到GPU)?

1 个答案:

答案 0 :(得分:1)

唯一显着的区别是,在一种情况下,通过PCIe(桌面)进行DMA传输,而在另一种情况下,它只是系统RAM(移动)中驱动程序拥有的缓冲区的memcpy。

在这两种情况下,它可能相对昂贵(例如,内存分配,数据复制,并且可能需要在某些系统上进行缓存维护),因此应尽可能地将其最小化。将资源上传到游戏关卡开始时需要的位置,然后从那时开始引用它们会更有效率。