Ubuntu 14.04 Задержка при переключении фокуса окна с использованием SDL2 и vsync

Я изучаю основы SDL2, и когда я запускаю свою программу (vsync, windowed), возникает задержка, когда переключение фокуса между окнами и перетаскивание окон запаздывает. Это относится ко всем окнам, а не только к приложению SDL2. Когда vsync не включен, все окна работают нормально, как и ожидалось.

Я использую Ubuntu 14.04, используя карту NVIDIA, версия драйвера 349.12. Ниже приведен минимальный рабочий пример, который воспроизводит поведение на моей машине.

#include <SDL2/SDL.h>

const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;

SDL_Window* gWindow = NULL;
SDL_Renderer* gRenderer = NULL;

void init(bool vsync);

int main(int argc, char* args[]) {

    init(true);

    bool quit = false;
    SDL_Event e;
    while (!quit) {
        while (SDL_PollEvent(&e) != 0) {
            if (e.type == SDL_QUIT) {
                quit = true;
            }
        }

        SDL_SetRenderDrawColor(gRenderer, 0xFF, 0xFF, 0xFF, 0xFF);
        SDL_RenderClear(gRenderer);

        SDL_Rect fillRect = {SCREEN_WIDTH/4, SCREEN_HEIGHT/4, SCREEN_WIDTH/2, SCREEN_HEIGHT/2};
        SDL_SetRenderDrawColor(gRenderer, 0xFF, 0x00, 0x00, 0xFF); //RGBA
        SDL_RenderFillRect(gRenderer, &fillRect);

        SDL_RenderPresent(gRenderer);
    }


    SDL_DestroyRenderer(gRenderer);
    gRenderer = NULL;
    SDL_DestroyWindow(gWindow);
    gWindow = NULL;

    SDL_Quit();


    return 0;
}

void init(bool vsync) {
    SDL_Init(SDL_INIT_VIDEO);
    SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "1");

    gWindow = SDL_CreateWindow("SDL test", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);

    if (vsync) {
        gRenderer = SDL_CreateRenderer(gWindow, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
    } else {
        gRenderer = SDL_CreateRenderer(gWindow, -1, SDL_RENDERER_ACCELERATED);
    }
}

Выполнение этого кода на второй машине (14.04, драйверы шмеля) приводит к плавному поведению окон как с vsync, так и без него. Я также пробовал множество игр с и без vsync, и единственная, которая воспроизводит поведение, это FTL (я считаю, что это игра SDL).

Как я могу исправить это / отладить дальше?

0 ответов

Другие вопросы по тегам