Opengl游戏循环多线程

Opengl Game Loop Multithreading

本文关键字:多线程 循环 游戏 Opengl      更新时间:2023-10-16

我最近一直在摆弄OpenGL,我注意到每当我试图调整窗口大小时,窗口消息泵都会被阻塞,因此每当我单击菜单栏或调整窗口尺寸时,渲染都会暂停。

为了解决这个问题,我正在研究多线程。

我有以下内容:

_beginthread(RenderEntryPoint, 0, 0);
while (!done)
{
    PeekMessage(&msg, NULL, NULL, NULL, PM_REMOVE);
    if (msg.message == WM_QUIT)
    {
        done = true;
    }
    else
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
}
void RenderEntryPoint(void *args)
{
    while (1)
    {
        //render code
    }
}

但是,我的场景没有被渲染,我不知道为什么。

您需要使OpenGL渲染上下文在渲染线程中为最新,确保它在窗口线程中不是最新的。这也意味着您不能从窗口线程调用任何OpenGL函数。