Встраивание SDL в GTK + - PullRequest
       12

Встраивание SDL в GTK +

4 голосов
/ 16 ноября 2011

У меня есть приложение, которое использует GTK + для отображения приятного графического интерфейса, но я использую SDL для отображения небольшого буфера кадров RGB внутри GTK +

Я использовал следующий код для получения SDL в GTK +:

char SDL_windowhack[32];
sprintf(SDL_windowhack, "SDL_WINDOWID=%ld", GDK_WINDOW_XWINDOW(deviceWindow->window));
putenv(SDL_windowhack);

К сожалению, я также использую SDL для событий клавиатуры и мыши.Основной поток, который использует SDL для обновления изображения, порождает следующий поток:

void *SDLEvent(void *arg)
{
    SDL_Event event;

    while (1) {
        fprintf(stderr, "Test\n");
        SDL_WaitEvent(&event);
        switch (event.type) {
            /* ... */
        }
    }
}

Я вижу, что оператор print выполняется дважды, а затем ни один.Как только я завершаю поток, который SDL использует для обновления экрана (отображения), цикл в SDLEvent снова начинает выполняться очень быстро.

Этот код работал нормально, прежде чем я интегрировал SDL в GTK +, поэтому я думаю,Возможно, GTK + блокирует SDL?

У кого-нибудь есть предложения, пожалуйста?

Большое спасибо!

1 Ответ

4 голосов
/ 16 ноября 2011

Хотя я не использовал SDL, но когда вы ищете события, похоже, что вы запускаете два цикла событий.Gtk запускает свой собственный цикл обработки событий, который обрабатывает события, подобные событиям мыши и клавиатуры.Я думаю, что вам нужно найти способ объединить оба.Некоторое приближение привело к следующей ссылке , где в разделе «Проблема с двойным циклом событий» была решена ваша проблема (я думаю).Попробуйте добавить SDLEvent функцию в качестве функции ожидания, используя g_idle_add, как предлагается в ссылке , и посмотрите, работает ли она.
Надеюсь, это поможет!

...