因此,基本上每当我创建缓冲对象时,OpenGL都会在GPU上分配一些内存。
考虑场景1,其中我生成了2个均匀变量的2个均匀缓冲液。
现在考虑场景2,其中我创建一个缓冲区并将2个统一变量包围在接口块内。
我的理解是,对于场景1,在方案2中,分配了两个独立的内存区域,一个很大的连续内存块被分配。如果是这样,那么方案1可能容易受到内存碎片的影响,如果发生这种情况是由OpenGL或其他内容管理,或者我们应该在编写Performance Pressive Code之前牢记这一点?
实际上我必须为您解决这个问题。是
基本上,每当我创建缓冲对象OpenGL分配某些内存。
时
您不知道 - 关于此内存的位置的下落,做出假设是无效的。您只会保证它在某处(某个地方(,并且可以使用它。
由OpenGL或某些东西管理
是。实际上,而且合理的OpenGL实现确实必须定期四处走动。考虑一下:在现代计算机系统上,几个应用程序 do 并行使用GPU,并且(通常((通常(都不关心或尊重同一机器的其他过程的内部工作。然而,用户(自然(期望,所有过程都将"仅仅工作"与情况无关。
GPU驱动程序在后台推动了很多数据,在系统内存,GPU内存之间移动东西,甚至在存储设备上交换空间,而无需注意任何一个。
或者在编写绩效关键代码之前,我们应该牢记这一点?
平均joe-programmer将通过直接使用OpenGL API来获得最佳性能,而无需试图超越实现实现。每个OpenGL实现(= GPU模型 驱动程序版本的组合(都有"快速路径",但是缺乏访问有关GPU的密切详细知识和驱动程序详细信息,这些知识很难达到。
通常只有GPU制造商本身才有这种知识。如果您是AAA游戏工作室,通常会在快速表盘上有几个GPU供应商的家伙来访问您的办公室并做他们的Voodoo;大多数访问此网站的人可能没有。