帧速率下降,在SDL窗口可调整大小时出现撕裂

时间:2014-12-17 20:07:35

标签: c sdl sdl-2

我刚刚从SDL 1.2转移到SDL 2.0,我最初享受类似的性能(65+ FPS),然后在渲染器选项中添加了Vsync并且享受了平滑的60 FPS而没有撕裂,然后我添加了标志SDL_WINDOW_RESIZABLE和帧率下降很多(没有Vsync 40 FPS,30 FPS),甚至Vsync出现撕裂,侧滚也变得非常紧张。我是否做任何事来处理调整大小事件都不会改变任何事情。我做错了什么?

我在VS2010上使用SDL 2.0.3进行64位编译。这是相关的代码:

// This creates the window and everything associated with it
void graphics_init(srgb_t **sfb)
{
    static int init=1;

    if (init)
    {
        init = 0;
        SDL_Init(SDL_INIT_TIMER | SDL_INIT_VIDEO | SDL_INIT_AUDIO);
    }

    window = SDL_CreateWindow ( VERSION,            // window title
                    SDL_WINDOWPOS_UNDEFINED,    // initial x position
                    SDL_WINDOWPOS_UNDEFINED,    // initial y position
                    0,              // width, in pixels
                    0,              // height, in pixels
                    SDL_WINDOW_RESIZABLE | SDL_WINDOW_MAXIMIZED);   // flags

    SDL_GetWindowSize(window, &kW, &kH);

    if (window == NULL)
    {
        fprintf(stderr, "Could not create window: %s\n", SDL_GetError());
        exit(EXIT_FAILURE);
    }

    renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_PRESENTVSYNC);
    texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STREAMING, kW, kH);

    *sfb = calloc (kW*kH, sizeof(srgb_t));
}

int main()
{
    graphics_init(&sfb);

    while (exit_flag==0)
    {
        ... // main loop stuff that fills my buffer sfb

        // Blits sfb buffer to screen
        SDL_UpdateTexture(texture, NULL, sfb, kW * sizeof(srgb_t));

        SDL_RenderClear(renderer);
        SDL_RenderCopy(renderer, texture, NULL, NULL);
        SDL_RenderPresent(renderer);
    }

    SDL_DestroyTexture(texture);
    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);
    SDL_Quit();

    return 0;
}

0 个答案:

没有答案