(我使用 Ogre3D 进行渲染,但问题应该是通用的。)
问题:大多数 3D 应用程序使用一个循环来迭代渲染帧并检查消息并处理它们。但是,如果打开一个对话框(MessageBox 或类似的),它会阻止线程的执行并运行它自己的消息循环,但它显然不会调用其中的 3D 渲染函数。
即使打开对话框,保持渲染 3D 场景的首选或“最佳”方式是什么?普通应用程序不会遇到这个问题,因为它们的重新渲染由 WM_PAINT 消息和类似消息处理,并且由于模式对话框确实具有内部消息循环,因此在需要时调用窗口 proc get 并且一切看起来都很好。然而,在我的 3D 项目中,“当需要时”一直是,因为窗口必须更新,即使没有 WM_PAINT 消息。
想到的简单解决方案是在对话框打开时注册一个计时器,并从 WindowProc 渲染 3D 场景,但这真的是最好的吗?好像很脏...