QQuickGraphicsConfiguration 类

QQuickGraphicsConfiguration 控制对于 QQuickWindow 的底层图形设置。有关详细信息,请参阅更多信息...

头文件 #include <QQuickGraphicsConfiguration>
CMakefind_package(Qt6 REQUIRED COMPONENTS Quick)
target_link_libraries(mytarget PRIVATE Qt6::Quick)
qmakeQT += quick
Qt 6.0

公共函数

QQuickGraphicsConfiguration()
~QQuickGraphicsConfiguration()
QByteArrayListdeviceExtensions() const
(since 6.5) boolisAutomaticPipelineCacheEnabled() const
boolisDebugLayerEnabled() const
boolisDebugMarkersEnabled() const
boolisDepthBufferEnabledFor2D() const
QStringpipelineCacheLoadFile() const
QStringpipelineCacheSaveFile() const
boolprefersSoftwareDevice() const
(since 6.5) voidsetAutomaticPipelineCache(bool enable)
(since 6.5) voidsetDebugLayer(bool enable)
(since 6.5) voidsetDebugMarkers(bool enable)
voidsetDepthBufferFor2D(bool enable)
voidsetDeviceExtensions(const QByteArrayList &extensions)
(since 6.5) voidsetPipelineCacheLoadFile(const QString &filename)
(since 6.5) voidsetPipelineCacheSaveFile(const QString &filename)
(since 6.5) voidsetPreferSoftwareDevice(bool enable)
(since 6.6) voidsetTimestamps(bool enable)
(since 6.6) booltimestampsEnabled() const

静态公共成员

(since 6.1) QByteArrayListpreferredInstanceExtensions()

详细描述

The QQuickGraphicsConfiguration class is a container for low-level graphics settings that can affect how the underlying graphics API, such as Vulkan, is initialized by the Qt Quick scene graph. It can also control certain aspects of the scene graph renderer.

注意:QQuickWindow上设置QQuickGraphicsConfiguration必须在 ese graph第一次初始化这个窗口之前进行。对于屏幕上的窗口,这意味着必须在与QQuickWindowQQuickView的show()方法之前调用。在QQuickRenderControl中,配置必须在调用initialize()之前确定。

外部渲染引擎或XR API配置

当构建并显示一个使用Vulkan进行渲染的QQuickWindow时,将通过Vulkan API初始化一个Vulkan实例(《VkInstance》),一个物理设备(《VkPhysicalDevice》),一个设备(《VkDevice》)及其相关对象(队列、池)。当使用QQuickRenderControl将渲染重定向到一个自定义渲染目标,如一个纹理时,情况也大致相同。虽然QVulkanInstance的构建在应用程序的控制之下,但其他图形对象的初始化方式在QQuickRenderControl::initialize()中以及与屏幕上的QQuickWindow相同。

对于大多数应用,不需要额外的配置,因为Qt Quick为许多底层图形设置提供了合理的默认值,例如启用哪些设备扩展。

但这并不总是足够的。在高级用例中,当直接集成Vulkan或其他图形API内容,或者当与外部3D或VR引擎(如OpenXR)集成时,应用程序将希望在其细节上指定自己的设置集,例如启用哪些设备扩展。

这正是这个类允许的。它允许指定,例如,在Vulkan或适用于该概念的图形API中使用时被场景图选中的设备扩展列表。对于不适用某些概念的情况,相关的设置将简单地忽略。

本类别中函数的示例是setDeviceExtensions()和preferredInstanceExtensions。后者在应用程序管理其自己的QVulkanInstance并将它与QQuickWindow通过QWindow::setVulkanInstance关联时是有用的。

Qt Quick Scene Graph Renderer Configuration

另一类设置与场景图的渲染器有关。在某些情况下,应用程序可能想控制某些行为,如渲染2D内容时使用深度缓冲区。在Qt 5中,这些设置要么根本无法控制,要么通过环境变量管理。在Qt 6中,QQuickGraphicsConfiguration提供了这些设置的新家,同时保留了对适用的传统环境变量的支持。

此类别的示例是setDepthBufferFor2D

图形设备配置

当Qt在初始化一个QQuickWindow时创建图形实例和设备对象(比如,Vulkan中的VkInstance和VkDevice,Direct 3D中的ID3D11Device等),在特定情况下,应用程序或库将想控制某些设置。

在Qt 6.5之前,此类设置中的某些可通过环境变量进行控制。例如,QSG_RHI_DEBUG_LAYERQSG_RHI_PREFER_SOFTWARE_RENDERER。这些仍然可用,并继续按以前的方式工作。QQuickGraphicsConfiguration还提供了额外的C++设置器。

例如,以下的主函数中打开了一个QQuickView,同时指定Vulkan验证或Direct3D调试层应该被启用。

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    QQuickGraphicsConfiguration config;
    config.setDebugLayer(true);

    QQuickView *view = new QQuickView;
    view->setGraphicsConfiguration(config);

    view->setSource(QUrl::fromLocalFile("myqmlfile.qml"));
    view->show();
    return app.exec();
}

管线缓存保存和加载

Qt Quick支持将图形/计算管线缓存存储到磁盘,并在应用程序的后续运行中重新加载它。管线缓存具体包含什么,查找如何工作,以及具体加速什么,这些都取决于Qt RHI后端以及运行时使用的底层本地图形API。不同的3D API在着色器、程序和管线状态对象方面有不同的概念,以及相应的缓存机制。这里的管线缓存高级概念将所有这些抽象化为在文件中存储和检索单个二进制块。

注意:将缓存存储在磁盘上可以导致后续应用程序运行时的改进,有时是显著的。

当遇到与之前运行相同的着色器程序和/或管线状态时,可能会跳过许多操作,从而加快着色器和材料初始化时间,这意味着启动可能变得更快,渲染过程中的延迟和“卡顿”可能减少或避免。

当在无法获取和重新加载管线缓存(或着色器/程序二进制文件)的图形API上运行时,尝试使用文件来保存和加载缓存没有任何效果。

注意:在许多情况下,检索的数据依赖于并绑定到图形驱动程序(可能是其确切版本)。Qt通过在管线缓存文件中存储额外的元数据来自动执行必要的检查。如果文件中的数据与运行时的图形设备和驱动程序版本不匹配,内容将被透明忽略,对应用程序无影响。因此,可以引用在另一个设备或驱动程序上生成的缓存。

驱动程序依赖性问题有一些例外,最显著的是Direct 3D 11,其中“管线缓存”仅用于存储运行时HLSL->DXBC编译的结果,因此与设备和厂商无关。

在某些情况下,可能希望通过“预先填充”缓存来改进应用程序的首次运行。这是通过发送之前运行保存的缓存文件,并在另一台计算机或设备上引用它来实现的。这样,应用程序或设备就可以在其首次运行期间访问在保存缓存文件的运行中遇到的着色器程序/管线。仅在目标系统上的设备和图形驱动程序相同时,发布和部署缓存文件才有意义,否则如果设备或驱动程序版本不匹配(D3D11除外),缓存文件将被忽略,如上所述。

一旦加载了缓存内容,仍然有可能应用程序构建了之前运行中没有遇到的图形和计算管线。在这种情况下,缓存将增长,其中包括添加到其中的管线/着色器程序。如果应用程序还选择保存内容(可能是保存到同一文件),那么旧的和新的管线都将被存储。每次运行时从同一个文件读取和保存可以允许不断增长的缓存,存储所有遇到的管线和着色器程序。

在实践中,Qt管线缓存可以预期映射到以下本地图形API特性

  • Vulkan - VkPipelineCache - 保存管线缓存实际上存储了从vkGetPipelineCacheData检索到的blob,并附加额外的元数据以安全地识别设备和驱动程序,因为管线缓存blob依赖于确切的驱动程序。
  • 金属 - MTLBinaryArchive - 在启用管线缓存保存的情况下,Qt 将遇到的全部渲染计算管线存储到一个 MTLBinaryArchive 中。保存管线缓存时,存储从存档中检索到的二进制文件,并附加额外的元数据以区分设备。 注意: 由于某些硬件和操作系统的各种问题,目前 macOS 和 iOS 上已禁用 MTLBinaryArchive 的使用。
  • OpenGL - 没有原生的管线概念,"管线缓存" 存储通过 glGetProgramBinary 获取的程序二进制文件集合。程序二进制文件被打包成一个单一的二进制文件,并附加额外的元数据以识别设备、驱动程序及其版本。在 Qt 中,程序二进制文件的持久缓存并非新鲜事:Qt 5 已经在 QOpenGLShaderProgram 中实现了类似功能,例如 addCacheableShaderFromSourceCode()。实际上,该机制在 Qt 6 中也始终激活,尤其是在使用 Qt Quick 和 OpenGL 时。然而,当使用此处提供的新、独立于图形 API 的管线缓存抽象时,Qt 5 时代的程序二进制缓存会自动禁用,因为相同的内容现在被封装在 "管线缓存" 中。
  • Direct3D 11 - 没有原生的管线概念或为第二阶段的编译(将独立于供应商的中间字节码编译成设备特定的指令集)检索二进制文件的概念。驱动程序通常会在这个级别上采用自己的缓存系统。相反,Qt Quick 的 "管线缓存" 被用于加快含有需要首先编译成中间字节码格式(如 HLSL 源代码的着色器)。这可以在运行时构建着色器代码的应用程序和库中带来显著的性能提升,因为如果已经为遇到的高级着色器准备好了字节码,则可以避免后续运行中成本高昂的、未缓存的 D3DCompile() 调用。Qt Quick 3D 是一个很好的例子,其中材料的运行时生成着色器意味着要处理 HLSL 源代码。因此,保存和重新加载 Qt Quick 管线缓存可以提高包含一个或多个 View3D 项的场景的性能。一个反例可能是 Qt Quick 本身:由于大多数内置的 2D 内容在构建时中都附带 DirectX 字节码,因此缓存不会带来任何显著改进。

所有这些都与 Qt Shader Tools 模块及其命令行工具(如 qsb)执行的着色器处理无关。以 Vulkan 为例。在离线或构建时将兼容 Vulkan 的 GLSL 源代码编译到 SPIR-V 中是很好的,因为这样可以避免运行时的昂贵编译过程。然而,SPIR-V 是一个独立的中间格式。在运行时,在构建图形或计算管线时,可能会发生另一轮编译,这次是从中间格式到 GPU 的供应商特定指令集(这可能会依赖于图形管线和渲染目标的状态)。管线缓存有助于这个后阶段。

注意: 许多图形 API 实现都使用自己的持久磁盘缓存,对应用程序来说是透明的。使用 Qt Quick 的管线缓存功能可能会在这方面提供改进,但收益可能较小。

调用 setPipelineCacheSaveFile() 和 setPipelineCacheLoadFile() 以控制哪个文件由 QQuickWindowQQuickView 保存和加载管线缓存。

要了解启用管道缓存磁盘存储效果的大致情况,可以通过环境变量QSG_INFO=1,或同时启用qt.scenegraph.generalqt.rhi.general日志类别来启用最重要的场景图和图形日志。当关闭QQuickWindow时,将会看到如下类似的日志信息:

Total time spent on pipeline creation during the lifetime of the QRhi was 123 ms

这给出了一个大致的想法,在窗口的生命周期中,花费在图形和计算管道创建(可能包括着色器编译的各种阶段)上的时间是多少。

当启用从管道缓存文件加载时,将确认这条消息

Attempting to seed pipeline cache from 'filename'

同样,为了检查是否成功启用了缓存保存,寻找如下消息

Writing pipeline cache contents to 'filename'

自动管道缓存

当未提供保存和加载的文件名时,将使用自动管道缓存策略。这包括将数据存储到系统特定于应用程序的缓存位置中(QStandardPaths::CacheLocation)。

可以通过以下方式之一禁用此功能:

  • 设置应用程序属性Qt::AA_DisableShaderDiskCache。 (完全禁用自动存储)
  • 将环境变量QT_DISABLE_SHADER_DISK_CACHE设置为非零值。 (完全禁用自动存储)
  • 将环境变量QSG_RHI_DISABLE_SHADER_DISK_CACHE设置为非零值。 (完全禁用自动存储)
  • 调用setAutomaticPiplineCache()并将enable参数设置为false。 (完全禁用自动存储)
  • 通过调用setPipelineCacheLoadFile设置文件名。 (仅禁用自动存储的读取,优先使用指定的文件)
  • 通过调用setPipelineCacheSaveFile设置文件名。 (仅禁用自动存储的写入,优先使用指定的文件)

前两种是自Qt 5.9以来用于控制OpenGL程序二进制缓存的现有机制。为了兼容性和熟悉感,相同的属性和环境变量支持Qt 6增强管道缓存。

自动管道缓存使用每个应用程序的单个文件,但对于每个RHI后端(图形API),使用不同的文件。这意味着在应用程序的下一次运行中切换到另一个图形API不会导致丢失上一次运行生成的管道缓存。但同时显示多个QQuickWindow实例的应用程序可能不会获得100%的效益,因为自动缓存每次只能存储从单个RHI对象收集的数据。 (并且默认的threaded渲染循环下,每个窗口都有其自己的RHI作为一个独立在专用线程上操作的渲染操作)。为了从具有多个窗口的应用程序中的磁盘缓存中完全受益,最好通过setPipelineCacheSaveFile分别为每个窗口显式设置文件名。

另请参阅QQuickWindow::setGraphicsConfigurationQQuickWindow,和QQuickRenderControl

成员函数文档

QQuickGraphicsConfiguration::QQuickGraphicsConfiguration()

构建默认的 QQuickGraphicsConfiguration,不指定场景图的其他任何设置来考虑。

[noexcept] QQuickGraphicsConfiguration::~QQuickGraphicsConfiguration()

析构函数。

QByteArrayList QQuickGraphicsConfiguration::deviceExtensions() const

返回所需附加设备扩展的列表。

另请参阅setDeviceExtensions

[自6.5以来] bool QQuickGraphicsConfiguration::isAutomaticPipelineCacheEnabled() const

如果自动管道缓存启用,则返回true。

默认情况下为true,除非设置了某些应用程序属性或环境变量。有关更多信息,请参阅自动管道缓存

此功能是在Qt 6.5中引入的。

另请参阅setAutomaticPipelineCache

bool QQuickGraphicsConfiguration::isDebugLayerEnabled() const

如果启用了调试/验证层,则返回true。

默认值为false。

另请参阅setDebugLayer

bool QQuickGraphicsConfiguration::isDebugMarkersEnabled() const

如果启用了调试标记,则返回true。

默认值为false。

另请参阅setDebugMarkers

bool QQuickGraphicsConfiguration::isDepthBufferEnabledFor2D() const

如果为2D内容启用了深度缓冲区使用,则返回true。

默认值为true,除非设置了QSG_NO_DEPTH_BUFFER环境变量。

QString QQuickGraphicsConfiguration::pipelineCacheLoadFile() const

返回用于加载管道缓存的当前设置的文件名。

默认值为空字符串。

另请参阅setPipelineCacheLoadFile

QString QQuickGraphicsConfiguration::pipelineCacheSaveFile() const

返回用于存储管道缓存的当前设置的文件名。

默认值为空字符串。

另请参阅setPipelineCacheSaveFile

[静态,自6.1以来] QByteArrayList QQuickGraphicsConfiguration::preferredInstanceExtensions()

返回Qt Quick在VkInstance上希望启用的Vulkan实例扩展列表。

在大多数情况下,Qt Quick负责创建QVulkanInstance。这种情况下此函数不适用。另一方面,当将QQuickRenderControl与基于Vulkan的渲染结合使用时,创建QVulkanInstance并将其与(离屏)QQuickWindow关联是应用程序的责任。在这种情况下,应用程序应查询要启用的实例扩展列表,并在调用QVulkanInstance::create()之前将它们传递给QVulkanInstance::setExtensions()。

此功能是在Qt 6.1中引入的。

bool QQuickGraphicsConfiguration::prefersSoftwareDevice() const

如果优先选择基于软件光栅化的图形设备,则返回true。

默认值为false。

另请参阅 setPreferSoftwareDevice()。

[自 6.5 版本起] void QQuickGraphicsConfiguration::setAutomaticPipelineCache(bool enable)

根据 enable 修改自动管道缓存的用途。

默认值为 true,除非设置了某些应用程序属性或环境变量。有关更多信息,请参阅自动管道缓存

此功能是在Qt 6.5中引入的。

另请参阅 isAutomaticPipelineCacheEnabled()。

[自 6.5 版本起] void QQuickGraphicsConfiguration::setDebugLayer(bool enable)

如果可用,启用图形 API 实现的调试或验证层。

在实际应用中,这支持 Vulkan 和 Direct 3D 11,前提是已安装和可用必要的支持(验证层、Windows SDK)。当 enable 为 true 时,Qt 将尝试在 VkInstance 上启用标准验证层,或将 D3D11_CREATE_DEVICE_DEBUG 设置在图形设备上。

对于 macOS 上的 Metal,在启动应用程序之前,请设置环境变量 METAL_DEVICE_WRAPPER_TYPE=1

将此函数的 enable 设置为 true 与将环境变量 QSG_RHI_DEBUG_LAYER 设置为非零值等效。

默认值为 false。

注意: 启用调试或验证层可能会对性能产生重大影响。强烈不建议在生产环境中启用标记后发布应用程序。

注意: 请注意,由于底层图形 API 设计上的差异,此设置不总是可以按 QQuickWindow 进行设置,尽管每个 QQuickWindow 都有自己的 QQuickGraphicsConfiguration。特别是对于 Vulkan,实例对象(VkInstance)只创建一次,然后由应用程序中的所有窗口使用。因此,启用验证层会影响所有窗口。这也意味着尝试在某个窗口已经开始了渲染之后出现的窗口上启用验证对 Vulkan 没有影响。其他 API,如 D3D11,将调试层概念作为按设备(ID3D11Device)设置的,因此它是在真正的按窗口基础上控制的(假设场景图渲染循环为每个 QQuickWindow 使用专用的图形设备/上下文)。

此功能是在Qt 6.5中引入的。

另请参阅 isDebugLayerEnabled()。

[自 6.5 版本起] void QQuickGraphicsConfiguration::setDebugMarkers(bool enable)

适用于本例的 enable 控制将调试标记和对象名称插入图形命令流中。

某些框架,例如 Qt Quick 3D,具有为它们创建的图形对象(缓冲区、纹理)添加名称,并在命令缓冲区中指示渲染通道的开始和结束的能力。这些内容可通过 RenderDoc 或 XCode 等工具捕获的帧中看到。

可以期望支持此功能的图形 API 包括 Vulkan(如果 VK_EXT_debug_utils 可用)、Direct 3D 11 和 Metal。

将此函数的 enable 设置为 true 等于将环境变量 QSG_RHI_PROFILE 设置为非零值。

默认值为 false。

注意: 启用调试标记可能会影响性能。不建议将标记启用后发布应用程序到生产环境。

此功能是在Qt 6.5中引入的。

另请参阅 isDebugMarkersEnabled()。

void QQuickGraphicsConfiguration::setDepthBufferFor2D(bool 启用)

设置2D内容的深度缓冲区用法为启用。当禁用时,Qt Quick场景图从不写入深度缓冲区。

默认值为true,除非设置了QSG_NO_DEPTH_BUFFER环境变量。

默认值为true是大多数场景的最佳设置。禁用深度缓冲区使用会降低场景图批处理效率。

然而,在某些情况下,允许2D内容写入深度缓冲区并不是理想的选择。考虑一个3D场景作为2D场景之上的“覆盖”场景,通过具有Overlay View3DrenderMode属性的Qt Quick 3D渲染。在这种情况下,由2D场景图渲染器生成和处理深度值的方式可能与3D场景的工作方式不兼容,可能会发生深度值冲突、碰撞和意外的深度测试失败。因此,稳健的方法是调用此函数并以启用参数设为false,并在QQuickWindow中禁用2D内容的深度缓冲区写入。

注意:此标志与设置QSG_NO_DEPTH_BUFFER环境变量不完全相同。此标志不控制深度/Stencil缓冲区的存在。它与渲染管线相关。要强制不使用深度/Stencil附加,请设置QSG_NO_DEPTH_BUFFERQSG_NO_STENCIL_BUFFER。但请注意,此类QQuickWindow以及其中的任何项层可能与某些操作模式的项,例如具有特定操作模式的View3D,不兼容,因为3D内容需要深度缓冲区。调用此函数 always是安全的,但它可能意味着即使是未实际使用的资源,例如深度缓冲区,也会被创建。

void QQuickGraphicsConfiguration::setDeviceExtensions(const QByteArrayList &扩展)

设置在图形设备上启用(例如,VkDevice)的附加扩展的列表。

在渲染 käytetään图形API中不适用此概念时,扩展将被忽略。

注意:该列表指定了额外的附加扩展。Qt Quick始终启用场景图所需的扩展。

另请参阅deviceExtensions()。

[since 6.5] void QQuickGraphicsConfiguration::setPipelineCacheLoadFile(const QString &文件名)

文件名设置为QQuickWindow预期从中加载其图形/计算管线缓存初始内容的文件。默认值为空,表示禁用管线缓存加载。

有关管线缓存讨论,请参阅Pipeline Cache Save and Load

持续存储管线缓存可以在应用程序未来的运行中提高性能,因为可以避免昂贵的着色器和管线构建步骤。

文件内容何时加载未定义,除了它将在QQuickWindow场景图初始化过程中某个时刻发生之外。因此,在此函数调用后,该文件必须继续存在。《QQuickGraphicsConfiguration》仅存储文件名,不能独自执行任何实际I/O和图形操作。实际工作将在稍后进行,可能是在另一个线程上。

当运行在无法检索或加载管线缓存(或着色器/程序二进制文件)的图形API上时,调用此函数将没有效果。

调用此函数大致等同于将环境变量 QSG_RHI_PIPELINE_CACHE_LOAD 设置为 filename,但有一个重要的区别:此函数仅控制与相关 QQuickWindow 相关联的管线缓存存储。因此,具有多个 QQuickWindowQQuickView 实例的应用程序可以通过为每个窗口分别创建文件来存储缓存的全部内容,并在以后重新加载。环境变量不允许这样做。

注意:如果文件中的数据与运行时的图形设备和驱动程序版本不匹配,则内容将被忽略,这对于应用程序来说是透明的。这适用于许多图形API,Qt负责进行必要的检查。有一个例外,即Direct 3D 11,其中“管线缓存”仅用于存储HLSL->DXBC编译的结果,因此与设备和供应商无关。

此功能是在Qt 6.5中引入的。

另请参阅:pipelineCacheLoadFile() 和 setPipelineCacheSaveFile()。

[自6.5以来] void QQuickGraphicsConfiguration::setPipelineCacheSaveFile(const QString &filename)

设置期望用于存储 QQuickWindow 的图形/计算管线缓存内容的 filename。默认值为空,表示管线缓存加载被禁用。

有关管线缓存讨论,请参阅Pipeline Cache Save and Load

持续存储管线缓存可以在应用程序未来的运行中提高性能,因为可以避免昂贵的着色器和管线构建步骤。

文件何时写入尚未定义。它很可能会在关闭窗口并拆除场景图时发生。因此,在 QQuickWindow 完全销毁之前,应用程序不应假设文件可用。QQuickGraphicsConfiguration 仅存储文件名,它不会自行执行实际I/O和图形操作。

当运行在无法检索管线缓存(或着色器/程序二进制文件)的图形API上时,调用此函数没有效果。

调用此函数大致等同于将环境变量 QSG_RHI_PIPELINE_CACHE_SAVE 设置为 filename,但有一个重要的区别:此函数仅控制相关 QQuickWindow 的管线缓存存储。因此,具有多个 QQuickWindowQQuickView 实例的应用程序可以通过为每个窗口分别创建文件来存储缓存的全部内容,并在以后重新加载。环境变量不支持这样做。

此功能是在Qt 6.5中引入的。

另请参阅:pipelineCacheSaveFile()、pipelineCacheLoadFile() 和 setPipelineCacheSaveFile()。

[自6.5以来] void QQuickGraphicsConfiguration::setPreferSoftwareDevice(bool enable)

请求选择一个使用基于软件的光栅化的适配器或物理设备。仅在基础API支持枚举适配器(例如Direct 3D或Vulkan)时适用,其他情况则不适用。

如果图形API实现没有这样的图形适配器或物理设备,则请求将被忽略。在Direct 3D中,可以预期始终可用基于WARP的光栅化器。在Vulkan中,仅当Mesa的lavapipe或报告VK_PHYSICAL_DEVICE_TYPE_CPU的某些物理设备可用时,标志才有作用。

enable 设置为 true 时调用此函数等同于将环境变量 QSG_RHI_PREFER_SOFTWARE_RENDERER 设置为非零值。

默认值为 false。

此功能是在Qt 6.5中引入的。

另请参阅 prefersSoftwareDevice()。

[自 6.6 版起] void QQuickGraphicsConfiguration::setTimestamps(bool 启用)

当启用时,从支持该功能的应用平台和 3D API 的命令缓冲区收集 GPU 时间数据。然后,这些数据将打印在渲染器日志中,可以通过设置 QSG_RENDER_TIMING 环境变量或日志类别,如 qt.scenegraph.time.renderloop 来启用,并且也可以使其他模块可见,例如 Qt Quick 3D 的 DebugView 项目。

默认情况下,这被禁用,因为收集数据可能会涉及额外的工作,例如在命令流中插入时间戳查询,这取决于底层图形 API。要启用,可以以 启用 设置为 true 的方式调用此函数,或将 QSG_RHI_PROFILE 环境变量设置为非零值。

预计支持此功能图模式有 Direct 3D 11、Direct 3D 12、Vulkan(只要底层 Vulkan 实现支持时间戳查询)、Metal 和 OpenGL(3.3 或更高版本的 core 或 compatibility profile 上下文)。OpenGL ES 不支持时间戳。

此函数是在 Qt 6.6 中引入的。

另请参阅 timestampsEnabled() 和 setDebugMarkers()。

[自 6.6 版起] bool QQuickGraphicsConfiguration::timestampsEnabled() const

如果启用 GPU 时间收集,则返回 true。

默认值为false。

此函数是在 Qt 6.6 中引入的。

另请参阅 setTimestamps()。

© 2024 The Qt Company Ltd。本文件中包含的文档贡献是各自所有者的版权。本文件中提供的文档是根据 Free Software Foundation 发布的 GNU Free Documentation License 第 1.3 版 许可的。Qt 以及相应的标志是 The Qt Company Ltd. 在芬兰及其他全球国家的商标。所有其他商标属于各自所有者。