2012-03-14 60 views
0

因此,這裏是我的代碼的問題:SDL的blitting正在非常緩慢

我創建了一個顯示屏幕:

displayScreen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE|SDL_DOUBLEBUF); 

然後我創建了一個背景:

background = load_image("gliderGameBackground1.png"); 
// I optimize the image 

然後,我有一箇中間表面:

screen = SDL_CreateRGBSurface(SDL_SWSURFACE|SDL_SRCALPHA, 300, 300, 32, 
            rmask, gmask, bmask, amask); 

然後我申請的表面:

apply_surface(0, 0, background, screen); 
apply_surface(0, 0, screen, displayScreen); 

我之所以有一箇中間的屏幕是我的計劃是要始終如一地做一個1920×1080的表面在遊戲循環再縮它基於什麼用戶希望再顯示該表面。我有一個上網本,所以我注意到幀速下降很快,這顯着下降。我計劃在做標誌的情況下做colorkey和per pixel alpha blitting以及全屏。

那麼我在做什麼錯,這使得這很慢?

+0

爲什麼要自己縮放呢?使用OpenGL表面並自動縮放。 – 2012-03-14 23:17:21

+0

那麼我還沒有擴展它,但我打算使用SDL_gfx zoomSurface() – user1270289 2012-03-14 23:19:44

+1

好吧,首先,你不應該在你的遊戲循環的每次迭代中創建一個新的表面。只有在窗口大小發生變化時才創建一個新窗口。但是,如果您使用OpenGL表面,則可以避免調整SDL RGB表面的大小,並在屏幕更改大小時更改OpenGL投影矩陣。 – 2012-03-14 23:26:07

回答