在Windows上,Qt是如何绘制的?它是否调用GDI进行绘制?

4

我是一名Windows开发人员,对WinAPI程序有一些经验。据我所知,在Windows上绘图有两种方式,一种是调用GDI(包括类似GDI+的包装器)进行传统绘图,另一种是调用一些API(如DX或OpenGL)使用GPU进行绘图。

但像Qt这样的东西是什么呢?Qt最终是调用GDI来绘制东西吗?还是它有自己直接绘制的方式?我只想了解它的一般理论。

3个回答

2

-1
从外观上看,自从QT 4.0以来,他们已经改变了GDI的使用,并用其他一些可能提高可移植性的内部机制替换了它。如果您愿意,QT是开源的,因此您可以查看代码以了解QTGUI.dll的内部机制。

“内部实现”到底是什么?你说“可移植性”,但我认为它必须有一个特定于Windows平台的实现。谢谢。 - maverix3

-2

我在实践中不了解这个问题,但是http://qt-project.org/forums/viewthread/33565上的答案似乎是可靠的。

更新:这个页面似乎更准确:http://qt-project.org/wiki/Qt-5-on-Windows-ANGLE-and-OpenGL

在Windows上,Qt 5可以通过ANGLE库配置为使用OpenGL驱动程序或DirectX驱动程序。您需要什么取决于您的用例。Qt项目为这两种变体提供了二进制安装程序。
OpenGL(开放图形库)是渲染2D和3D计算机图形的广泛行业标准[opengl.org]。它是Mac OS X、Linux和大多数嵌入式平台上硬件加速图形操作的事实标准。
OpenGL ES 2.0(嵌入式系统的开放图形库)是OpenGL的一个简化版本,用于嵌入式系统,其中缺少一些功能。
Qt 5中的Qt Quick 2堆栈基于OpenGL,并且需要OpenGL 3.0(或具有framebuffer_object扩展的OpenGL 2.x或更高版本)或OpenGL ES 2.0。Qt OpenGL模块[qt-project.org]需要OpenGL 1.3或更高版本。
尽管Microsoft Windows自相当长时间以来就支持OpenGL,但支持的标准版本(未安装任何驱动程序的版本1)对于Qt来说太过有限。新版本通常可通过自定义图形驱动程序获得,但需要用户安装它们。此外,某些驱动程序提供的OpenGL支持质量不佳。
ANGLE(Almost Native Graphics Layer Engine)是Google的一个开源项目[code.google.com]。其目的是将OpenGL ES 2.0 API调用映射到DirectX 9 API。其定期更新的版本是qtbase[qt.gitorious.org]的一部分。
要使用ANGLE编译Qt,您必须安装Direct X SDK[msdn.microsoft.com]。从Windows Kit 8开始,这已包含在Windows SDK中。
如果您的应用程序中使用了ANGLE,则应将d3dcompiler_XX.dll与Qt库一起发布。 D3D着色器编译器的版本字符串从DirectX SDK标头中提取,因此请确保获取与ANGLE构建的相同版本(例如_43或_46)。如果您使用-angle-d3d11配置Qt,则这变得特别重要。
推荐使用桌面OpenGL,如果您的应用程序使用不属于OpenGL ES 2.0的OpenGL调用;您的应用程序根本不使用OpenGL(因为ANGLE意味着额外的部署依赖项,然后不需要);您的应用程序需要在Windows XP上运行。虽然在此平台上使用ANGLE作为缺少图形驱动程序的替代方案很诱人,但它并不完全有效,并且可能导致崩溃,例如在打开安全对话框时。
如果您需要OpenGL ES功能但不需要完整的OpenGL;您拥有具有不同Windows版本和图形卡的异构用户群体;您不希望用户安装最新的图形卡驱动程序;您想使用QtMultimedia的视频播放功能(请参见QTBUG-31800[bugreports.qt-project.org]);您的应用程序需要通过Windows远程桌面协议运行(请参见OpenGL和远程桌面[social.technet.microsoft.com])。
进一步阅读: http://qt-project.org/doc/qt-5.1/qtdoc/requirements-win.html http://qt-project.org/doc/qt-5.1/qtopengl/qtopengl-index.html http://blog.qt.digia.com/blog/2012/10/24/graphics-on-windows-from-a-different-angle/ http://blogs.msdn.com/b/chuckw/archive/2012/05/07/hlsl-fxc-and-d3dcompile.aspx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接