【问题标题】:Where and what is "OpenGL memory" used by VBOs, etcVBO等使用的“OpenGL内存”在哪里以及是什么
【发布时间】:2013-02-14 19:37:51
【问题描述】:
我正在学习如何使用 VBO,正如书中所说,
"...您可以通过将顶点数据移动到 OpenGL 来释放 CPU 内存
GPU 上的内存。”
那么,GPU 在这方面究竟能处理什么?假设“OpenGL 内存”可以存储数百万个多边形的顶点数据是否可以接受?那么移动设备中的 GPU 呢?
虽然开发人员习惯于在 CPU 内存限制方面有一个参考框架,但学习 OpenGL 部分是具有挑战性的,因为我对 GPU 及其硬件的期望了解不多。所以当我读到像上面这样含糊不清的陈述时,我会感到紧张。
【问题讨论】:
标签:
opengl
graphics
opengl-es
gpu
【解决方案1】:
OpenGL 有一个抽象的设备和内存模型。从技术上讲,在 OpenGL 的世界中,没有 CPU 和 GPU 内存,而是 client 和 server 内存。 OpenGL 缓冲区对象位于服务器端。服务器,这只是意味着 OpenGL 驱动程序抽象出来的所有内容。如果作为缓存的 GPU 内存不足,OpenGL 驱动程序完全可以将数据从 GPU 交换到 CPU。因此你的书是这样说的:
“...您可以通过将顶点数据移动到 GPU 上的 OpenGL 内存来释放 CPU 内存。”
不完全正确,因为 OpenGL 缓冲区对象中的数据很可能驻留在 CPU 内存中。
【解决方案2】:
规范中有最低要求,但总的来说,GPU 内存量是相当广泛的可用信息,您在购买 PC 时肯定会注意到(被卖家夸大了)。但是,正如@datenwolf 所说,您无法真正知道数据的实际位置;重要的是你可以销毁你的临时缓冲区。
无论使用何种技术,您都应该考虑目标硬件的功能。