欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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?

 

相关标签: 笔记