在Windows验证窗口的脏区之前,将继续发送WM_PAINT消息。重置脏区的API是“ EndPaint”。
调用SwapBuffers根本不会影响无效的窗口区域。
您的WM_PAINT处理程序应类似于以下内容:
case WM_PAINT:
HDC hdc;
PAINTSTRUCT ps;
hdc = BeginPaint(hwnd,&ps);
wglMakeCurrent(hdc,scene.m_oglContext);
scene.Render(); //
wglSwapBuffers(hdc);
wglMakeCurrent(hdc,0);
EndPaint(hwnd,&ps);
return 0;
Run Code Online (Sandbox Code Playgroud)
用于Open GL编程的许多示例代码在应用程序启动时都具有单个HDC和OpenGL上下文设置。尽管它使示例代码更简单,但这确实意味着该代码无法正确处理多个OpenGL上下文。此WM_PAINT处理程序假定为场景创建了OpenGL上下文,然后根据需要将其设为最新。
根据需要交换OpenGL上下文的副作用是,将从BeginPaint检索的hdc用作渲染(和SwapBuffer)目标,这意味着当其他窗口在应用程序窗口上拖动时,OpenGL应用程序现在将同步绘制。
归档时间: |
|
查看次数: |
3921 次 |
最近记录: |