QT OPENGL
程序员文章站
2022-04-03 23:17:37
...
QWebEngineView
渲染采用了OPENGL,但是实际使用有些用户会遇见无法渲染出来控件的问题。
后来发现是他们的显卡不大好,支持的OPENGL版本不够。可以尝试
QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts);
QCoreApplication::setAttribute(Qt::AA_UseSoftwareOpenGL);
但是这个也不是纯软件的,当OPENGL版本小于2的时候还是渲染不出来。
QT的这个浏览器对老机器的支持感觉真心是不大好,所以面对大量用户的软件还是要慎用。
显卡OpenGL版本查看测试工具GPU_Caps_Viewer
已经存到百度网盘,等需要了可以用来测试下
获取OPENGL 版本的代码
PIXELFORMATDESCRIPTOR pfd =
{
sizeof(PIXELFORMATDESCRIPTOR),
1,
PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER, //Flags
PFD_TYPE_RGBA, //The kind of framebuffer. RGBA or palette.
32, //Colordepth of the framebuffer.
0, 0, 0, 0, 0, 0,
0,
0,
0,
0, 0, 0, 0,
24, //Number of bits for the depthbuffer
8, //Number of bits for the stencilbuffer
0, //Number of Aux buffers in the framebuffer.
PFD_MAIN_PLANE,
0,
0, 0, 0
};
HDC ourWindowHandleToDeviceContext = GetDC(NULL);
int letWindowsChooseThisPixelFormat;
letWindowsChooseThisPixelFormat = ChoosePixelFormat(ourWindowHandleToDeviceContext, &pfd);
SetPixelFormat(ourWindowHandleToDeviceContext, letWindowsChooseThisPixelFormat, &pfd);
HGLRC ourOpenGLRenderingContext = wglCreateContext(ourWindowHandleToDeviceContext);
wglMakeCurrent(ourWindowHandleToDeviceContext, ourOpenGLRenderingContext);
//const GLubyte * name = glGetString(GL_VENDOR);
//const GLubyte * OpenGLVersion = glGetString(GL_VERSION);
//****测试下opengl 功能*************//
const GLubyte * version = glGetString(GL_VERSION);
if (version != NULL)
{
int ver1, ver2, ver3;
int ret = sscanf((char*)version, "%d.%d.%d", &ver1, &ver2, &ver3);
if (ret <= 0 || ver1 < 3)//opengl 版本太低采用软件渲染方式
{
QCoreApplication::setAttribute(Qt::AA_UseSoftwareOpenGL);
}
}
wglDeleteContext(ourOpenGLRenderingContext);
ReleaseDC(NULL, ourWindowHandleToDeviceContext);
glGetString 在大部分机器上都执行正常,但是有一台机器上获取的是NULL,不知道什么问题,难道是不支持OPENGL?
上一篇: 揭谜一键Ghost的“恶”事 大白菜、老毛桃、通用都不干净
下一篇: 直角坐标转极坐标