0

我意识到没有办法避免它,因为OpenGL 没有提到 VRAM 碎片。

但无论如何,我的应用程序中存在碎片,我想尝试在常见平台上减少它。

我在该主题上发现的唯一内容是:

防止大量内存碎片的最佳方法是尝试并限制项目中不同分辨率的数量。当资产被换成​​具有相同分辨率的资产时,通常它可以将其放在内存中。

这很有意义。

这真的是个好主意吗?还有其他要记住的事情吗?

请注意,在我的用例中,我几乎所有的 VRAM 使用都由纹理(以及后/前/深度缓冲区)组成。几乎没有缓冲对象等。

4

1 回答 1

0

基本上你是对的。在所有资源中,纹理是重的。您不仅可以将纹理用作缓冲区,还可以将其用作普通图像。另外,您可以拥有相同纹理的多个分辨率。您必须记住,在驱动程序方面,有某些标准可以使资源加载到 GPU ram 中或卸载。因此,如果您有相同分辨率的纹理。即使其中一个被卸载,它的内存块也可以分配给另一个而不会产生任何碎片。此外,当您为此创建纹理或任何资源时,您无法确定内存是否存在于 GPU Ram 中。它可以是基于驱动程序实现的任何地方。此外,在资源驱动程序的生命周期内,可能会将该资源从一个内存移动到另一个内存。除此之外,至少在 OpenGL 中,您无法控制不同的内存以及它们的分配方式。您知道自己在做什么,因为您不仅可以指定所需的内存类型,还可以为该内存指定自己的分配器。

于 2018-12-20T13:18:30.960 回答