我正在用 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 位表面。
有没有更好的方法来提高性能?