当CPU忙时,GLUT窗口变为黑色“(无响应)”

时间:2010-11-01 01:17:11

标签: glut cpu-usage

我正在编写光线跟踪器并使用GLUT显示结果。我在子块中渲染图像,在渲染每个子块后,我更新视图。

我看到的是渲染进度,但几秒后,渲染窗口变黑,窗口标题显示为“(未响应)”。然而,renderprocess继续运行(100%cpu使用率)并在控制台输出上输出progressinfo。渲染完成后,GLUT窗口将恢复正常并显示图像。

为了在渲染过程中保持窗口响应以使其不变黑,我该怎么办?

谢谢!

//编辑:我在等待渲染线程时显然阻止了我的主线程:

while(true){
    if(m_activeRenderThreads==0)
        break;
    ::WaitForSingleObject(updateEvent->m_hObject, 200);
    notifyObservers(); //inherited from IFunctionObservable
}

notifyObservers()调用:

update(){
    glClear(GL_COLOR_BUFFER_BIT);
    glViewport(0,0,resX,resY);
    glRasterPos2i(-1,-1);
    glDrawPixels(resX, resY, GL_RGB, GL_FLOAT, renderBuffer);
    glutSwapBuffers();
}

这个最后一个函数只有在我从mainthread调用它时才有效。通过renderthreads调用它不会更新我的窗口

1 个答案:

答案 0 :(得分:0)

您需要做的是将所有处理放在一个单独的线程中;主GUI线程应仅用于响应GUI事件和绘制窗口,但不应进行任何密集计算。所以......在一个单独的线程中,绘制到缓冲区,然后经常在主GUI线程上安排将此缓冲区复制到UI中。