2012-03-14 33 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

回答