【问题标题】:SDL blitting is being really slowSDL blitting 真的很慢
【发布时间】:2012-03-16 02:28:35
【问题描述】:

这是我的代码问题:

我创建了一个显示屏幕:

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 x 1080 的表面,然后根据用户的需要缩小它,然后显示该表面。我有一个上网本,所以我注意到帧率很快下降,这显着下降。我计划做 colorkey 和每像素 alpha blitting 以及全屏,以防对标志很重要。

那么我做错了什么导致它变慢了?

【问题讨论】:

  • 为什么要自己扩展?使用 OpenGL 表面并使其自动缩放。
  • 好吧,我什至还没有缩放它,但我打算使用 SDL_gfx zoomSurface()
  • 嗯,首先,您不需要在游戏循环的每次迭代中创建一个新表面。如果窗口大小发生变化,创建一个新的才有意义。但是,如果您使用 OpenGL 表面,则可以避免调整 SDL RGB 表面的大小,而只需在屏幕改变大小时更改 OpenGL 投影矩阵。

标签: c++ sdl


【解决方案1】:

确保使用SDL_DisplayFormat() 将您的表面转换为显示格式以获得最佳的位图传输。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-08
    • 2012-09-02
    • 2017-11-10
    • 2010-12-28
    • 2013-01-25
    • 1970-01-01
    相关资源
    最近更新 更多