c - 大量的 libSDL 纹理
问题描述
我正在开发一个应用程序,向用户展示一个可能非常大的用户生成的图片库,当时大约有 10 张图片。该应用程序将使用 libSDL 和 2D 纹理以 C 语言实现以加速渲染。它在伪代码中的总体要点是:
while cycle < MAX_CYCLES
while i < MAX_STEPS
show a gallery of 10 image thumbnails
while (poll events)
if event == user has pushed next
break
i++
scramble image galleries using a genetic algorithm
cycle++
我可以在初始化时从磁盘加载每个图像,创建所有需要的纹理,因此图像呈现速度很快。但当然这会很慢,并且可能会分配大量纹理。
我将缩小图像进行展示,这样可以缓解问题,但集合的总大小取决于用户偏好。当然我可以限制最大值,但它不能小。
我正在考虑在每个周期的每个步骤中卸载每个未使用的图像,使用SDL_FreeSurface
and SDL_DestroyTexture
。这意味着每次都从磁盘重新加载数据,重新创建表面并重新创建纹理。这是一种可行的方法吗?
此外,我了解 SDL 纹理存储在 GPU 内存中,因此卡上的可用内存量应该是我主要关心的问题。我对吗?
综上所述,有没有推荐的方法来处理这种情况?
解决方案
我会在内存中始终保留 3 张幻灯片。
上一页 - 当前 - 下一页
在呈现当前幻灯片时,预加载下一张幻灯片并卸载幻灯片编号 (Current - 2)。
此外,我了解 SDL 纹理存储在 GPU 内存中,因此卡上的可用内存量应该是我主要关心的问题。我对吗?
不完全是,如果 GPU(驱动程序)似乎有必要,它会将未使用的纹理数据外包给 RAM。
例如,如果您要呈现 10 个图像,因此内存中有 30 个图像,那么对于 2K(带 alpha)(1920 x 1080 x 4),您将需要大约 30 个图像。250 MB。
只要您不在嵌入式系统(或非常旧、过时的系统)上运行,这应该不是一个大问题。
推荐阅读
- vba - How to get values from controls on tabstrip in VBA?
- .net - .NET 包错误
- operating-system - 彼得森解中的有界等待
- python - 在Python中查找数组中的值开始减少的点
- python - sklean.model_selection.StratifiedShuffleSplit 中的 n_splits 的目的是什么?
- vuejs2 - 如何在vue中显示地理编码的经度
- python - 在 Python 中每 3 列添加小时值
- python - Time format on x axis in Matplotlib
- batch-file - I want to retrieve data of particular date If user provide? Otherwise, it retrieves T-1 date which is currently fetching. Through Batch file
- python - 如何在python中更改surface3d的预定义选项