blitting大纹理时,SDL性能下降

时间:2015-10-26 14:55:24

标签: sdl

我目前正在使用CodeBlocks在SDL中开发一款小游戏,看起来我在表面和纹理管理方面遇到了一些麻烦。我目前的进展是使用箭头键在屏幕上移动纹理。但是,我注意到在加载相对较大的图像时,FPS急剧下降,因此我在屏幕上移动的纹理移动得慢得多。 我的绘制函数如下所示:

const char* assets[5]={"assets/textures/0.tga","assets/textures/1.tga",
"assets/textures/2.tga","assets/textures/3.png","assets/textures/4.png"};
SDL_Surface* tex[5];

void DrawImage(int i, SDL_Surface* &dest, SDL_Rect &rect)
{
    if(tex[i]==NULL) tex[i] = IMG_Load(assets[i]);
    SDL_BlitSurface(tex[i], NULL, dest, &rect);
}

数组中的第四个纹理是大的。如果我发出以下任何一项:

DrawImage(0, screenSurface, rect);
DrawImage(1, screenSurface, rect);
DrawImage(2, screenSurface, rect);
DrawImage(4, screenSurface, rect);
一切顺利。但是,如果我发出:

DrawImage(3, screenSurface, rect);

并将纹理保持在窗口的边界,一切都以慢动作运行。将纹理移动到窗口的边界之外会使一切再次正常运行。 主循环看起来像这样:

bool running = true;
        while(running)
        {
            SDL_FillRect(screenSurface, NULL, SDL_MapRGB(screenSurface->format, 0, 0, 0));
            DrawImage(3, screenSurface, rect);
            MovePlayer(rect, state);
            MoveCursor(NULL, NULL, screenSurface);
            SDL_PumpEvents();
            SDL_UpdateWindowSurface(window);
            if (state[SDL_SCANCODE_ESCAPE])
            {
                SDL_DestroyWindow(window);
                running = false;
            }
        }

有没有办法克服这个问题?

提前致谢。

1 个答案:

答案 0 :(得分:0)

调查SDL_Renderer以利用硬件渲染。 SDL_UpdateWindowSurface使用软件渲染,速度很慢。