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以及全屏。
那么我在做什么错,这使得这很慢?
为什么要自己缩放呢?使用OpenGL表面并自动缩放。 – 2012-03-14 23:17:21
那么我还没有扩展它,但我打算使用SDL_gfx zoomSurface() – user1270289 2012-03-14 23:19:44
好吧,首先,你不应该在你的游戏循环的每次迭代中创建一个新的表面。只有在窗口大小发生变化时才创建一个新窗口。但是,如果您使用OpenGL表面,则可以避免调整SDL RGB表面的大小,并在屏幕更改大小时更改OpenGL投影矩阵。 – 2012-03-14 23:26:07