2012-12-06 27 views
0

我正在用C製作2D SDL遊戲。遊戲的原始分辨率爲160×120,這是在屏幕上顯示某個(整數)比例因子(x1,x2,...) )給一個很好的別名&像素化獨立式的外觀。沒有什麼奇怪的。然而,它對遊戲的表現有相當的(可見的)影響:比例因子越高,影響越大(顯然)。在SDL中升級屏幕以獲得像素化外觀的更快方法?

處理該縮放的代碼並顯示如下:

#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位表面。

有沒有更好的方法來提高性能?

+0

的可能重複的[有道以縮放SDL表面無削波?](http://stackoverflow.com/questions/328500/proper-way-to-scale-an-sdl-surface-without-clipping) –

回答

0

一個簡單的解決方案是升級load而不是draw函數中的所有內容,然後存儲擴展版本並重新使用它。你將會交易內存以獲得更好的性能。

0

找到了解決方案。我編譯了最新的不穩定版本的SDL 2.0(它支持全硬件加速),並且只使用SDL_Texture來獲得一個不錯的恆定高FPS,無論分辨率如何。