更快的方式来升级屏幕以获得SDL中的像素化外观?

时间:2012-12-06 12:54:26

标签: c performance sdl pixel hardware-acceleration

我正在用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位曲面。

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

2 个答案:

答案 0 :(得分:0)

一个简单的解决方案是升级load上的所有内容,而不是draw函数中的内容,然后存储扩展版本并重复使用。你将交易记忆以获得更好的表现。

答案 1 :(得分:0)

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