巨大的SDL_Textures - 内存不足
Huge SDL_Textures - Out of Memory
我编写基于图块的游戏的原型来学习地图 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_CreateRGBSurface
, SDL_FillRect
, SDL_CreateTextureFromSurface
缺点:纹理将是(257x257)(瓷砖)x(60x60)(像素/瓷砖)x(32)(位/像素)~ 951 MB。 并且具有用于不同缩放步骤的多个纹理,其处理方式非常大。
我将不胜感激任何提高性能的提示。
第一个例子只是画了一个填充的矩形......这不能慢,我必须看到更多才能给出更好的答案。
通常,您只希望渲染屏幕上可见的图块,而不是地图本身上的图块。使用 60x60 图块,您只需使用 SDL 2D 绘图功能即可。当您添加不同的缩放级别时,恐怕您不能只使用 1x1 像素的图块并使用相同的方法 - 您将尝试通过函数调用调用每个像素!
因此,一旦你添加了不同的缩放级别,你就必须弄清楚如何在屏幕上显示它 - 以及这对玩家意味着什么:)
相关文章:
- 是否值得降低我的代码的可读性,以便在出现内存不足错误时提供异常安全性?
- 在内存不足之前,我可以声明多少个 const 变量?
- 如何避免由于内存不足而导致 gcc 崩溃
- 检测到由于操作系统内存不足而导致子进程终止
- 导出 vulkan 内存分配句柄会导致设备内存不足
- 如何消除ROS打开CV中的内存不足错误?
- 32 位应用程序内存不足
- 在本机 Android 应用中处理内存不足
- 在 Linux 上C++的无限循环中捕获内存不足的错误 bad_alloc()
- 处理静态数组内存C++的内存不足情况
- 访问违规可以是一个伪装的内存不足错误吗
- g++ 内存不足为 std::bitset 分配
- C++ 分配器在内存不足时使应用程序崩溃
- 使用队列的非递归回溯:内存不足
- C++ : 内存不足时应返回什么?
- 使用 sqlite3 时内存不足
- std::int 和 struct 内存不足的映射 (std::Bad_alloc) c++
- SQLITE 内存不足 无法执行语句
- 内存不足的概念
- 从 c# 内存不足异常调用 c++ 委托