我们有一个应用程序,我们使用GDI和OpenGL来绘制相同的HWND,但是只有.
例:
当切换到3d模式时,我们只为该HWND创建一个OpenGL上下文,我们可以使用OpenGL绘制它.当切换回2d模式时,我们只是破坏OpenGL上下文,我们可以使用GDI绘制到HWND.
直到最近,这种方法运作良好.在Windows 10上,对于某些NVidia卡,如果驱动程序比382.05更新,则此功能不再起作用.在这种情况下,当我们删除OpenGL上下文并使用GDI在HWND上绘图时,窗口仍然显示来自OpenGL的最后一个内容.
我检查了所有可用的像素格式.所有人都有同样的问题.
我们做错了什么,还是NVidia错误?你看到解决方案/解决方法吗?
它可能与NVidia + Intel双GPU设置有关,但至少有一个反例.我们有反馈的卡片:
不复制:
转载:
在OpenGL中绘制2d内容不是一种选择,反之亦然.此外,该应用程序对性能非常敏感,因此不能选择将2d内容绘制到屏幕外的GDI图像,以便将其绘制为OpenGL四元组.它也不是销毁和重新创建HWND的选项.
下面是重现该问题的示例应用程序.默认情况下,应用程序显示蓝色背景,其中一些文本处于GDI模式.在OpenGL模式下,显示了旋转三角形.空格键用于在模式之间切换.
#include <windows.h>
#include <GL/gl.h>
#include <iostream>
#pragma comment( lib, "OpenGL32.lib" )
HWND s_hwnd = 0;
HDC s_hdc = 0;
HGLRC s_hglrc = 0;
bool s_quit = false;
static HGLRC createContext(HWND …Run Code Online (Sandbox Code Playgroud)