【发布时间】:2010-11-01 01:17:10
【问题描述】:
我正在编写一个光线追踪器并使用 GLUT 来显示结果。我在子块中渲染图像,并在渲染每个子块后更新视图。
发生的情况是我看到了渲染进度,但几秒钟后,渲染窗口变黑并且窗口标题显示“(未响应)”。然而,渲染进程继续运行(以 100% cpu 使用率)并在控制台输出上输出进度信息。渲染完成后,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();
}
只有当我从主线程调用它时,最后一个函数才有效。通过渲染线程调用它不会更新我的窗口
【问题讨论】: