巨大的SDL_Textures - 内存不足

Huge SDL_Textures - Out of Memory

本文关键字:内存不足 Textures SDL 巨大      更新时间:2023-10-16

我编写基于图块的游戏的原型来学习地图 SDL.My 只是一个 257x257 的图块数组,每个图块是 1x1 到 60x60 像素(不同的缩放)。SDL 窗口的分辨率为 1024x768。所以我可以显示 18x13 到 1024*768 瓷砖。

到目前为止,我尝试了 2 个应用程序。

第一:从磁贴渲染

//for (at worst) 1024*768 Tiles
SDL_Rect Tile;
SDL_SetRenderDrawColor(gRenderer, /*some color*/ , 255);
Tile = { Tile_size * x, Tile_size * y, Tile_size, Tile_size };
SDL_RenderFillRect(gRenderer, &(Tile));

缺点:这很耗时,如果我尝试移动地图,游戏就会开始滞后。


第二次在游戏开始前创建纹理

与: SDL_CreateRGBSurfaceSDL_FillRectSDL_CreateTextureFromSurface

缺点:纹理将是(257x257)(瓷砖)x(60x60)(像素/瓷砖)x(32)(位/像素)~ 951 MB。 并且具有用于不同缩放步骤的多个纹理,其处理方式非常大。

我将不胜感激任何提高性能的提示。

第一个例子只是画了一个填充的矩形......这不能慢,我必须看到更多才能给出更好的答案。

通常,您只希望渲染屏幕上可见的图块,而不是地图本身上的图块。使用 60x60 图块,您只需使用 SDL 2D 绘图功能即可。当您添加不同的缩放级别时,恐怕您不能只使用 1x1 像素的图块并使用相同的方法 - 您将尝试通过函数调用调用每个像素!

因此,一旦你添加了不同的缩放级别,你就必须弄清楚如何在屏幕上显示它 - 以及这对玩家意味着什么:)