基本上,我有一個實現OpenGL的wxWidget應用程序 - 後者顯示在可通過用戶輸入(點擊,拖動等),wxTimer或由外部過程。當焦點轉移到另一個窗口(無論是內部對話框還是其他應用程序)時,問題就會出現 - wxPanel會在幾秒鐘內立即停止更新,特別是如果其他窗口位於最前面(有時,被遮擋的小部分面板仍將繼續更新)。重新激活應用程序或調整窗口大小「解凍」面板,並繼續正常操作。當窗口處於非活動狀態時,wxPanel閃爍/失敗
這是我一直在wxWidgets中遇到的一個問題,無論是在這種情況下的OpenGL面板還是其他。一般來說,我可以通過在窗口重新調整窗口,調整窗口大小或類似的東西之間進行Freeze()和Thaw()之間的大量SwapBuffer()調用來解決此問題,但這些都有可能產生閃爍或其他不可忽略的視覺僞影,並且如果每幀完成(例如,當動畫需要在非活動窗口中繼續播放時),則會影響性能。
無限期的反覆試驗可能會產生一些不錯的結果,但我真的很想知道,處理這個問題的「正確」方法是什麼?提前謝謝了。
下面的代碼的參考骨架:
void MyGLCanvas::Draw(bool focus, int parentID) //This is what's called by the rest of the application
{
if (focus) { SetFocus(); }
SetCurrent();
wxClientDC dc(this);
Paint(dc);
}
void MyGLCanvas::Paint(wxDC &dc)
{
//All OpenGL drawing code here
glFlush();
SwapBuffers();
}
void MyGLCanvas::OnPaint(wxPaintEvent& event)
{
wxPaintDC dc(this);
Paint(dc);
event.Skip();
}