我在VRAM上存储的数据超过了它的实际大小。怎么可能?

时间:2014-09-10 16:31:39

标签: opengl memory gpu vbo

我正在分析我的简单体素世界渲染器的性能。我想找到不同技术的性能限制,一种压力测试。在某些时候,我发现了一些非常奇怪的东西。我使用不同的VBO为每个块分配几何数据。我正在使用一些编程到引擎中的计数器来帮助我查看数据发生了什么。

所以我在这里尝试分配 664 块,其中包含 1 199 824 体素,它们是使用 28 795 776 顶点构建的。
每个vert由位置的 3 浮点数组成, 3 浮点数用于法线向量, 4 浮点数用于RGBA颜色。 Float显然是 4 字节的大小,所以根据我计算出的这个整个世界的估计内存大小大致 1098Mb (vertexcount * 3 * 4 * 2 + vertexCount * 4 * 4)。我以7 FPS的惊人速度运行该程序,但它工作并且看起来应该如此。问题是我正在使用带有1 GB视频内存的GiGabyte GeForce GTX 460 OC2。那我怎么能通过VBO 1098Mb的数据分配呢?
是否曾在VRAM内部以某种方式缓存压缩数据?
或者也许我不知道有几个Mb的储备记忆?唯一的解释是我的计数器给了我错误的结果,或者希望有一些我不知道的视频内存管理?

1 个答案:

答案 0 :(得分:5)

您正在谈论的VRAM是什么?的;)

OpenGL没有VRAM或显卡本地内存的概念。只有"记忆"在OpenGL中,这纯粹是抽象的。数据可以从GPU本地内存交换到系统内存,并根据需要返回。

如果硬件支持它(和GTX460一样!)纹理甚至可以比可用的GPU本地内存大,并且所需的纹理子数据可以根据需要进行交换。