我在VRAM上存储的数据多于实际大小.怎么可能?

Shi*_*ter 2 memory opengl gpu vbo

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

所以在这里我试图分配包含1 199 824个体素的664个块,这些块使用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的储备记忆?唯一的解释是我的计数器给了我错误的结果,或者希望有一些我不知道的视频内存管理?



dat*_*olf 5

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

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

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