我意识到,对于某些,没有办法避免,因为OpenGL没有提到VRAM碎片。
不过,尽管如此,我的应用程序还是很零碎,我想尝试在普通平台上减少它。
我在这个话题上唯一发现的就是这
防止大量内存碎片的最佳方法是尝试并限制项目中不同分辨率的数量。当资产被替换为相同分辨率的资产时,通常情况下它可以在内存中占据位置。
这很有道理。
这真的是个好主意吗?关于这件事还有什么要记住的吗?
请注意,在我的usecase中,几乎所有的VRAM使用都是由纹理(以及后面/前面/深度缓冲区)组成的。几乎没有什么是缓冲区对象之类的。
发布于 2018-12-20 13:18:30
基本上你是对的。在所有的资源中,纹理是沉重的。不仅你可以使用纹理作为缓冲,也可以作为正常的图像。此外,您可以有多个分辨率相同的纹理。您必须记住,在驱动程序端,有一些条件可以使资源加载到GPU或卸载中。所以如果你有相同分辨率的纹理。即使其中一个内存块被卸载,它的内存块也可以分配给其他内存块,而不需要任何碎片。另外,当您创建纹理或任何资源时,您无法确定内存是否存在于GPU中。它可以是基于驱动程序实现的任何地方。此外,在资源驱动程序的生存期内,可能会将该资源从一个内存移动到另一个内存。除此之外,至少在OpenGL中,您无法控制不同的内存以及它们是如何分配的。因此,在这种情况下,Vulkan是首选的,当您需要更多的控制和时,您知道自己在做什么,,因为您不仅可以指定您想要的内存类型,还可以为该内存指定您自己的分配器。
https://stackoverflow.com/questions/53866976
复制相似问题