【问题标题】:Faster way to upscale the screen for a pixelated look in SDL?在 SDL 中升级屏幕以获得像素化外观的更快方法?
【发布时间】:2012-12-07 22:15:35
【问题描述】:

我正在用 C 语言制作一个 2D SDL 游戏。游戏的原始分辨率是 160 × 120,就在将它显示在屏幕上之前,它按一定的(整数)比例因子(x1、x2、.. .) 给一个很好的别名和像素化的独立外观。那里没有什么令人惊讶的。但是,它对游戏的性能有相当(可见的)影响:比例因子越高,影响就越大(显然)。

处理缩放和显示的代码如下:

#define GET_PIXEL(surface, x, y) *(Uint32 *)((Uint32 *)surface->pixels + (y * surface->w) + x)

void draw(void) {
    if (SDL_MUSTLOCK(screen.native))
        SDL_LockSurface(screen.native);
    for (int i = 0; i < 120; ++i)
        for (int j = 0; j < 160; ++j) {
            SDL_Rect rect = { j * screen.scale, i * screen.scale, screen.scale, screen.scale };
            SDL_FillRect(screen.scaled, &rect, GET_PIXEL(screen.native, j, i));
        }
    if (SDL_MUSTLOCK(screen.native))
        SDL_UnlockSurface(screen.native);
    SDL_Flip(screen.scaled);
}

每帧都会调用draw() 函数。 screen.native 是 160 × 120 的游戏表面,screen.scaled 是缩放后的最终表面。两者都是使用 SDL_HWSURFACE 标志创建的 32 位表面。

有没有更好的方法来提高性能?

【问题讨论】:

标签: c performance sdl pixel hardware-acceleration


【解决方案1】:

一个简单的解决方案是升级load 上的所有内容,而不是draw 函数中的所有内容,然后存储升级后的版本并重复使用它。您将用内存换取更好的性能。

【讨论】:

    【解决方案2】:

    找到了解决办法。我编译了最新的不稳定版本的 SDL 2.0(它支持全硬件加速)并且只使用SDL_Textures 来获得一个不错的恒定高 FPS,无论分辨率如何。

    【讨论】:

      猜你喜欢
      • 2011-01-01
      • 1970-01-01
      • 2023-03-31
      • 2021-02-11
      • 2023-04-05
      • 1970-01-01
      • 2017-11-21
      • 1970-01-01
      • 2020-07-07
      相关资源
      最近更新 更多