将SDL嵌入GTK +

时间:2011-11-16 02:12:12

标签: c sdl gtk

我有一个使用GTK +显示一些不错的GUI的应用程序,但是我使用SDL在GTK +中显示一个小的RGB帧缓冲区

我使用以下代码将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 个答案:

答案 0 :(得分:4)

虽然我没有使用SDL,但是当您正在寻找事件时,您似乎正在运行两个事件循环。 Gtk运行自己的事件循环,处理像鼠标和鼠标之类的事件。键盘。我认为你需要找到一种方法来整合两者。一些谷歌搜索导致了以下link部分" Double事件循环问题"你的问题已得到解决(我认为)。尝试使用g_idle_add中建议的link添加SDLEvent函数作为闲人函数,看看它是否有效。
希望这有帮助!