QQuickGraphicsConfiguration Class
QQuickGraphicsConfiguration controla la configuración de gráficos de bajo nivel para QQuickWindow. Más...
| Cabecera: | #include <QQuickGraphicsConfiguration> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Quick)target_link_libraries(mytarget PRIVATE Qt6::Quick) |
| qmake: | QT += quick |
| Desde: | Qt 6.0 |
Funciones Públicas
| QQuickGraphicsConfiguration() | |
| ~QQuickGraphicsConfiguration() | |
| QByteArrayList | deviceExtensions() const |
(since 6.5) bool | isAutomaticPipelineCacheEnabled() const |
| bool | isDebugLayerEnabled() const |
| bool | isDebugMarkersEnabled() const |
| bool | isDepthBufferEnabledFor2D() const |
| QString | pipelineCacheLoadFile() const |
| QString | pipelineCacheSaveFile() const |
| bool | prefersSoftwareDevice() const |
(since 6.5) void | setAutomaticPipelineCache(bool enable) |
(since 6.5) void | setDebugLayer(bool enable) |
(since 6.5) void | setDebugMarkers(bool enable) |
| void | setDepthBufferFor2D(bool enable) |
| void | setDeviceExtensions(const QByteArrayList &extensions) |
(since 6.5) void | setPipelineCacheLoadFile(const QString &filename) |
(since 6.5) void | setPipelineCacheSaveFile(const QString &filename) |
(since 6.5) void | setPreferSoftwareDevice(bool enable) |
(since 6.6) void | setTimestamps(bool enable) |
(since 6.6) bool | timestampsEnabled() const |
Miembros públicos estáticos
(since 6.1) QByteArrayList | preferredInstanceExtensions() |
Descripción Detallada
La clase QQuickGraphicsConfiguration es un contenedor para configuraciones gráficas de bajo nivel que pueden afectar a cómo la API gráfica subyacente, como Vulkan, es inicializada por el gráfico de escena Qt Quick. También puede controlar ciertos aspectos del renderizador del gráfico de escena.
Nota: La configuración de un QQuickGraphicsConfiguration en QQuickWindow debe realizarse con suficiente antelación, antes de que el gráfico de escena se inicialice por primera vez para esa ventana. Con ventanas en pantalla esto significa que la llamada debe hacerse antes de invocar show() en QQuickWindow o QQuickView. Con QQuickRenderControl la configuración debe estar finalizada antes de llamar a initialize().
Configuración para motores de renderizado externos o API XR
Cuando se construye y muestra un QQuickWindow que utiliza Vulkan para renderizar, una instancia Vulkan (VkInstance), un dispositivo físico (VkPhysicalDevice), un dispositivo (VkDevice) y los objetos asociados (colas, pools) se inicializan a través de la API Vulkan. Lo mismo ocurre cuando se utiliza QQuickRenderControl para redirigir el renderizado a un objetivo de renderizado personalizado, como una textura. Mientras que la construcción de QVulkanInstance está entonces bajo el control de la aplicación, la inicialización de otros objetos gráficos ocurre de la misma manera en QQuickRenderControl::initialize() que con un QQuickWindow en pantalla.
Para la mayoría de las aplicaciones no es necesaria ninguna configuración adicional porque Qt Quick proporciona valores predeterminados razonables para muchos ajustes gráficos de bajo nivel, por ejemplo, qué extensiones de dispositivo habilitar.
Sin embargo, esto no siempre será suficiente. En casos de uso avanzado, cuando se integra directamente Vulkan u otro contenido de API de gráficos, o cuando se integra con un motor 3D o VR externo, como OpenXR, la aplicación querrá especificar su propio conjunto de ajustes cuando se trata de detalles, como qué extensiones de dispositivo habilitar.
Esto es lo que permite esta clase. Permite especificar, por ejemplo, una lista de extensiones de dispositivo que luego es recogida por el gráfico de escena cuando se utiliza Vulkan, o APIs gráficas donde el concepto es aplicable. Cuando algunos conceptos no son aplicables, los ajustes relacionados simplemente se ignoran.
Ejemplos de funciones en esta categoría son setDeviceExtensions() y preferredInstanceExtensions(). Esta última es útil cuando la aplicación gestiona su propio QVulkanInstance que luego se asocia con el QQuickWindow a través de QWindow::setVulkanInstance().
Qt Quick Configuración del renderizador de gráficos de escena
Otra clase de configuraciones están relacionadas con el renderizador del gráfico de escena. En algunos casos las aplicaciones pueden querer controlar cierto comportamiento, como el uso del buffer de profundidad cuando se renderiza contenido 2D. En Qt 5 tales ajustes no eran controlables en absoluto, o se gestionaban a través de variables de entorno. En Qt 6, QQuickGraphicsConfiguration proporciona un nuevo hogar para estos ajustes, manteniendo el soporte para las variables de entorno heredadas, cuando sea aplicable.
Un ejemplo en esta categoría es setDepthBufferFor2D().
Configuración de dispositivos gráficos
Cuando la instancia gráfica y los objetos de dispositivo (por ejemplo, el VkInstance y VkDevice con Vulkan, el ID3D11Device con Direct 3D, etc.) son creados por Qt al inicializar un QQuickWindow, hay ajustes que las aplicaciones o librerías querrán controlar bajo ciertas circunstancias.
Antes de Qt 6.5, algunos de estos ajustes estaban disponibles para ser controlados mediante variables de entorno. Por ejemplo, QSG_RHI_DEBUG_LAYER o QSG_RHI_PREFER_SOFTWARE_RENDERER. Éstas todavía están disponibles y continúan funcionando como antes. QQuickGraphicsConfiguration proporciona además setters en C++.
Por ejemplo, la siguiente función main() abre un QQuickView mientras especifica que la validación Vulkan o la capa de depuración Direct3D deben estar habilitadas:
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(); }
Almacenamiento y carga de caché de tuberías
Qt Quick soporta el almacenamiento de la caché del pipeline gráfico/computacional en disco, y su recarga en posteriores ejecuciones de una aplicación. Qué contiene exactamente la caché de canalización, cómo funcionan las búsquedas y qué se acelera exactamente depende del backend RHI de Qt y de la API gráfica nativa subyacente que se utilice en tiempo de ejecución. Diferentes APIs 3D tienen diferentes conceptos cuando se trata de shaders, programas y objetos de estado de canalización, y los correspondientes mecanismos de caché. El concepto de caché de canalización de alto nivel abstrae todo esto al almacenamiento y recuperación de un único blob binario desde y hacia un archivo.
Nota: El almacenamiento de la caché en el disco puede dar lugar a mejoras, a veces significativas, en posteriores ejecuciones de la aplicación.
Cuando se encuentra el mismo programa de sombreado y/o estado de canalización que en una ejecución anterior, es probable que se omitan una serie de operaciones, lo que lleva a tiempos de inicialización de sombreado y material más rápidos, lo que significa que el inicio puede ser más rápido y que los retardos y "janks" durante el renderizado pueden reducirse o evitarse.
Cuando se ejecuta con una API gráfica en la que la recuperación y recarga de la caché del pipeline (o de los binarios de shaders/programas) no es aplicable o no está soportada, intentar utilizar un archivo para guardar y cargar la caché no tiene ningún efecto.
Nota: En muchos casos los datos recuperados dependen y están ligados al controlador gráfico (y posiblemente a la versión exacta del mismo). Qt realiza las comprobaciones necesarias automáticamente, almacenando metadatos adicionales en el archivo de caché de canalización. Si los datos en el archivo no coinciden con el dispositivo gráfico y la versión del controlador en tiempo de ejecución, el contenido será ignorado de forma transparente para la aplicación. Por lo tanto, es seguro hacer referencia a una caché que se generó en otro dispositivo o controlador.
Hay excepciones al problema de la dependencia del controlador, sobre todo Direct 3D 11, donde la "pipeline cache" se utiliza sólo para almacenar los resultados de la compilación HLSL->DXBC en tiempo de ejecución y, por lo tanto, es independiente del dispositivo y del proveedor.
En algunos casos puede ser deseable mejorar la primera ejecución de la aplicación, "preconfigurando" la caché. Esto es posible enviando el archivo de caché guardado de una ejecución anterior, y referenciándolo en otra máquina o dispositivo. De este modo, la aplicación o el dispositivo dispone de los programas de sombreado y las líneas de comandos que se han encontrado anteriormente en la ejecución que guardó el archivo de caché durante su primera ejecución. Enviar y desplegar el archivo de caché sólo tiene sentido si el dispositivo y los controladores gráficos son los mismos en el sistema de destino; de lo contrario, el archivo de caché se ignora si el dispositivo o la versión del controlador no coinciden (con la excepción de D3D11), como se ha descrito anteriormente.
Una vez cargado el contenido de la caché, sigue existiendo la posibilidad de que la aplicación cree canalizaciones gráficas y de cálculo que no se hayan encontrado en ejecuciones anteriores. En estos casos la caché crece, con los pipelines / programas shader añadidos a ella. Si la aplicación también elige guardar los contenidos (quizás incluso en el mismo archivo), entonces se almacenarán tanto los pipelines antiguos como los nuevos. Cargar desde y guardar en el mismo archivo en cada ejecución permite una caché cada vez mayor que almacena todos los pipelines y programas shader encontrados.
En la práctica, la caché de pipelines de Qt puede corresponderse con las siguientes características de la API gráfica nativa:
- Vulkan - VkPipelineCache - Guardar la caché de pipeline almacena efectivamente el blob recuperado de vkGetPipelineCacheData, con metadatos adicionales para identificar con seguridad el dispositivo y el controlador, ya que el blob de caché de pipeline depende del controlador exacto.
- Metal - MTLBinaryArchive - Con el guardado de caché de canalización activado, Qt almacena todas las canalizaciones de renderizado y cálculo encontradas en un MTLBinaryArchive. Al guardar la caché de tuberías se almacena el blob recuperado del archivo, con metadatos adicionales para identificar el dispositivo. Nota: actualmente el uso de MTLBinaryArchive está deshabilitado en macOS e iOS debido a diversos problemas en algunas versiones de hardware y SO.
- OpenGL - No existe un concepto nativo de pipelines, la "caché de pipelines" almacena una colección de binarios de programa recuperados mediante glGetProgramBinary. Los binarios de programa se empaquetan en un único blob, con metadatos adicionales para identificar el dispositivo, el controlador y la versión desde la que se recuperaron los binarios. La caché persistente de binarios de programa no es nueva en Qt: Qt 5 ya tenía una funcionalidad similar en QOpenGLShaderProgram, ver addCacheableShaderFromSourceCode() por ejemplo. De hecho ese mecanismo está siempre activo en Qt 6 también cuando se usa Qt Quick con OpenGL. Sin embargo, cuando se usa la nueva abstracción de caché de canalización independiente de la API gráfica que se proporciona aquí, la caché binaria del programa de la era Qt 5 se desactiva automáticamente, ya que ahora el mismo contenido se empaqueta en la "caché de canalización".
- Direct 3D 11 - No existe un concepto nativo de pipelines o de recuperación de binarios para la segunda fase de compilación (donde el bytecode intermedio independiente del fabricante se compila en el conjunto de instrucciones específico del dispositivo). Los controladores suelen emplear su propio sistema de caché en ese nivel. En cambio, la "caché de canalización" de Qt Quick se utiliza para acelerar los casos en los que los sombreadores contienen código fuente HLSL que debe compilarse primero en el formato de bytecode intermedio. Esto puede presentar mejoras significativas de rendimiento en aplicaciones y librerías que componen código shader en tiempo de ejecución, porque en ejecuciones posteriores las llamadas potencialmente caras y sin caché a D3DCompile() pueden evitarse si el bytecode ya está disponible para el shader HLSL encontrado. Un buen ejemplo es Qt Quick 3D, donde los shaders generados en tiempo de ejecución para los materiales implican tener que lidiar con el código fuente HLSL. Por tanto, guardar y recargar la caché del pipeline de Qt Quick puede aportar mejoras considerables en escenas que contengan uno o más elementos de View3D. Un contraejemplo puede ser el propio Qt Quick: como la mayoría de los sombreadores incorporados para contenido 2D vienen con bytecode DirectX generado en tiempo de compilación, la caché no va a presentar ninguna mejora significativa.
Todo esto es independiente del procesamiento de shaders realizado por el módulo Qt Shader Tools y sus herramientas de línea de comandos como qsb. Como ejemplo, tomemos Vulkan. Tener el código fuente GLSL compatible con Vulkan compilado a SPIR-V ya sea en tiempo offline o de compilación (directamente vía qsb o CMake) es bueno, porque se evita la costosa compilación desde el código fuente en tiempo de ejecución. Sin embargo, SPIR-V es un formato intermedio independiente del proveedor. En tiempo de ejecución, cuando se construyen pipelines gráficos o de cálculo, es probable que se produzca otra ronda de compilación, esta vez desde el formato intermedio al conjunto de instrucciones específico del fabricante de la GPU (y esto puede depender de cierto estado en el pipeline gráfico y también de los objetivos de renderizado). La caché de canalización ayuda en esta última fase.
Nota: Muchas implementaciones de APIs gráficas emplean su propia caché de disco persistente de forma transparente para las aplicaciones. El uso de la función de caché de canalización de Qt Quick probablemente proporcionará mejoras en este caso, pero las ganancias podrían ser menores.
Llame a setPipelineCacheSaveFile() y setPipelineCacheLoadFile() para controlar en qué archivos QQuickWindow o QQuickView guarda y carga la caché de canalización.
Para hacerse una idea de los efectos de habilitar el almacenamiento en disco de la caché del pipeline, habilite los registros de scenegraph y gráficos más importantes a través de la variable de entorno QSG_INFO=1, o bien a través de las categorías de registro qt.scenegraph.general y qt.rhi.general. Al cerrar el QQuickWindow, aparece un mensaje de registro como el siguiente:
Total time spent on pipeline creation during the lifetime of the QRhi was 123 ms
Esto da una idea aproximada de cuánto tiempo se ha empleado en la creación de gráficos y pipelines de computación (que puede incluir varias etapas de compilación de shaders) durante el tiempo de vida de la ventana.
Cuando se activa la carga desde un archivo de caché de pipeline, esto se confirma con un mensaje:
Attempting to seed pipeline cache from 'filename'
Del mismo modo, para comprobar si el guardado de la caché se ha activado correctamente, busca un mensaje como este:
Writing pipeline cache contents to 'filename'
La caché automática del pipeline
Cuando no se proporciona ningún nombre de archivo para guardar y cargar, se utiliza la estrategia de almacenamiento automático en caché. Esto implica el almacenamiento de datos en la ubicación de caché específica de la aplicación del sistema (QStandardPaths::CacheLocation).
Esto puede desactivarse por uno de los siguientes medios:
- Establezca el atributo de aplicación Qt::AA_DisableShaderDiskCache. (desactiva completamente el almacenamiento automático)
- Establecer la variable de entorno QT_DISABLE_SHADER_DISK_CACHE a un valor distinto de cero. (desactiva completamente el almacenamiento automático)
- Establecer la variable de entorno QSG_RHI_DISABLE_SHADER_DISK_CACHE en un valor distinto de cero. (desactiva completamente el almacenamiento automático)
- Llamar a setAutomaticPiplineCache() con el argumento enable puesto a false. (desactiva completamente el almacenamiento automático)
- Establecer un nombre de archivo llamando a setPipelineCacheLoadFile(). (sólo desactiva la carga desde el almacenamiento automático, prefiriendo el archivo especificado en su lugar)
- Establezca un nombre de archivo llamando a setPipelineCacheSaveFile(). (sólo desactiva la escritura en el almacenamiento automático, prefiriendo en su lugar el archivo especificado)
Los dos primeros son mecanismos existentes que se usan desde Qt 5.9 para controlar la caché binaria del programa OpenGL. Por compatibilidad y familiaridad el mismo atributo y variable de entorno son soportados para la caché pipeline mejorada de Qt 6.
La caché de canalización automática utiliza un único archivo por aplicación, pero uno diferente para cada backend RHI (API gráfica). Esto significa que el cambio a otra API gráfica en la siguiente ejecución de la aplicación no provocará la pérdida de la caché de canalización generada en la ejecución anterior. Las aplicaciones con múltiples instancias de QQuickWindow mostradas simultáneamente pueden, sin embargo, no beneficiarse al 100% ya que la caché automática sólo puede almacenar los datos recogidos de un objeto RHI a la vez. (y con el bucle de renderizado por defecto threaded cada ventana tiene su propio RHI ya que el renderizado opera independientemente en hilos dedicados). Para beneficiarse plenamente de la caché de disco en aplicaciones con múltiples ventanas, es preferible establecer el nombre de archivo explícitamente, por ventana a través de setPipelineCacheSaveFile().
Véase también QQuickWindow::setGraphicsConfiguration(), QQuickWindow, y QQuickRenderControl.
Documentación de las funciones miembro
QQuickGraphicsConfiguration::QQuickGraphicsConfiguration()
Construye una QQuickGraphicsConfiguration por defecto que no especifica ninguna configuración adicional para el gráfico de escena a tener en cuenta.
[noexcept] QQuickGraphicsConfiguration::~QQuickGraphicsConfiguration()
Destructor.
QByteArrayList QQuickGraphicsConfiguration::deviceExtensions() const
Devuelve la lista de las extensiones de dispositivo adicionales solicitadas.
Véase también setDeviceExtensions().
[since 6.5] bool QQuickGraphicsConfiguration::isAutomaticPipelineCacheEnabled() const
Devuelve true si la caché de canalización automática está activada.
Por defecto es true, a menos que se establezcan ciertos atributos de la aplicación o variables de entorno. Consulte The Automatic Pipeline Cache para obtener más información.
Esta función se introdujo en Qt 6.5.
Véase también setAutomaticPipelineCache().
bool QQuickGraphicsConfiguration::isDebugLayerEnabled() const
Devuelve true si las capas de depuración/validación deben estar habilitadas.
Por defecto el valor es false.
Véase también setDebugLayer().
bool QQuickGraphicsConfiguration::isDebugMarkersEnabled() const
Devuelve true si los marcadores de depuración están habilitados.
Por defecto el valor es false.
Véase también setDebugMarkers().
bool QQuickGraphicsConfiguration::isDepthBufferEnabledFor2D() const
Devuelve true si el uso del búfer de profundidad está habilitado para contenido 2D.
Por defecto, el valor es true, a menos que se establezca la variable de entorno QSG_NO_DEPTH_BUFFER.
QString QQuickGraphicsConfiguration::pipelineCacheLoadFile() const
Devuelve el nombre de archivo configurado actualmente para cargar la caché de canalización.
Por defecto, el valor es una cadena vacía.
Véase también setPipelineCacheLoadFile().
QString QQuickGraphicsConfiguration::pipelineCacheSaveFile() const
Devuelve el nombre de archivo configurado actualmente para almacenar la caché de canalización.
Por defecto, el valor es una cadena vacía.
Véase también setPipelineCacheSaveFile().
[static, since 6.1] QByteArrayList QQuickGraphicsConfiguration::preferredInstanceExtensions()
Devuelve la lista de extensiones de instancia Vulkan que Qt Quick prefiere tener habilitadas en la VkInstance.
En la mayoría de los casos Qt Quick es responsable de crear un QVulkanInstance. Esta función no es relevante entonces. Por otro lado, cuando se utiliza QQuickRenderControl en combinación con el renderizado basado en Vulkan, es responsabilidad de la aplicación crear un QVulkanInstance y asociarlo con el (fuera de pantalla) QQuickWindow. En este caso, se espera que la aplicación consulte la lista de extensiones de instancia a habilitar, y las pase a QVulkanInstance::setExtensions() antes de llamar a QVulkanInstance::create().
Esta función se introdujo en Qt 6.1.
bool QQuickGraphicsConfiguration::prefersSoftwareDevice() const
Devuelve verdadero si se prioriza un dispositivo gráfico basado en rasterizador de software.
Por defecto el valor es false.
Véase también setPreferSoftwareDevice().
[since 6.5] void QQuickGraphicsConfiguration::setAutomaticPipelineCache(bool enable)
Cambia el uso de la caché de canalización automática basada en enable.
El valor por defecto es true, a menos que se establezcan ciertos atributos de la aplicación o variables de entorno. Consulte The Automatic Pipeline Cache para obtener más información.
Esta función se introdujo en Qt 6.5.
Véase también isAutomaticPipelineCacheEnabled().
[since 6.5] void QQuickGraphicsConfiguration::setDebugLayer(bool enable)
Activa las capas de depuración o validación de la implementación de la API gráfica, si están disponibles.
En la práctica, esto es compatible con Vulkan y Direct 3D 11, suponiendo que el soporte necesario (capas de validación, SDK de Windows) esté instalado y disponible en tiempo de ejecución. Cuando enable es true, Qt intentará habilitar la capa de validación estándar en la VkInstance, o establecer D3D11_CREATE_DEVICE_DEBUG en el dispositivo gráfico.
Para Metal en macOS, establezca la variable de entorno METAL_DEVICE_WRAPPER_TYPE=1 en su lugar antes de iniciar la aplicación.
Llamar a esta función con enable establecido en true equivale a establecer la variable de entorno QSG_RHI_DEBUG_LAYER en un valor distinto de cero.
El valor por defecto es false.
Nota: Activar las capas de depuración o validación puede tener un impacto no significativo en el rendimiento. Se desaconseja encarecidamente enviar aplicaciones a producción con esta opción activada.
Nota: Tenga en cuenta que, debido a las diferencias en el diseño de las API de gráficos subyacentes, esta configuración no siempre puede ser una configuración per-QQuickWindow, aunque cada QQuickWindow tiene su propio QQuickGraphicsConfiguration. Con Vulkan en particular, el objeto instancia (VkInstance) sólo se crea una vez y luego es utilizado por todas las ventanas de la aplicación. Por lo tanto, habilitar la capa de validación es algo que afecta a todas las ventanas. Esto también significa que intentar habilitar la validación a través de una ventana que sólo se muestra después de que otras ventanas ya han comenzado a renderizar no tiene ningún efecto con Vulkan. Otras APIs, como D3D11, exponen el concepto de capa de depuración como un ajuste por dispositivo (ID3D11Device), por lo que se controla realmente por ventana (asumiendo que el bucle de renderizado del scenegraph utiliza un dispositivo/contexto gráfico dedicado para cada QQuickWindow).
Esta función se introdujo en Qt 6.5.
Véase también isDebugLayerEnabled().
[since 6.5] void QQuickGraphicsConfiguration::setDebugMarkers(bool enable)
En su caso, enable controla la inserción de marcadores de depuración y nombres de objetos en el flujo de comandos gráficos.
Algunos frameworks, como Qt Quick 3D, tienen la capacidad de anotar los objetos gráficos que crean (buffers, texturas) con nombres y también indicar el comienzo y el final de los pases de renderizado en el buffer de comandos. Estas anotaciones son visibles en las capturas de fotogramas realizadas con herramientas como RenderDoc o XCode.
Las APIs gráficas que soportan esta función son Vulkan (si VK_EXT_debug_utils está disponible), Direct 3D 11 y Metal.
Llamar a esta función con enable en true equivale a establecer la variable de entorno QSG_RHI_PROFILE en un valor distinto de cero.
El valor por defecto es false.
Nota: La activación de los marcadores de depuración puede afectar al rendimiento. No se recomienda enviar aplicaciones a producción con el indicador activado.
Esta función se introdujo en Qt 6.5.
Véase también isDebugMarkersEnabled().
void QQuickGraphicsConfiguration::setDepthBufferFor2D(bool enable)
Establece el uso del búfer de profundidad para contenido 2D en enable. Cuando se desactiva, el gráfico de escena Qt Quick nunca escribe en el búfer de profundidad.
Por defecto, el valor es true, a menos que se establezca la variable de entorno QSG_NO_DEPTH_BUFFER.
El valor por defecto de true es la configuración más óptima para la gran mayoría de las escenas. Deshabilitar el uso del búfer de profundidad reduce la eficiencia del procesamiento por lotes del gráfico de escena.
Sin embargo, hay casos en los que permitir que el contenido 2D escriba en la memoria de profundidad no es lo ideal. Considere una escena 3D como una "superposición" encima de la escena 2D, renderizada a través de Qt Quick 3D utilizando un View3D con renderMode ajustado a Overlay. En este caso, tener el búfer de profundidad lleno de contenido 2D puede causar resultados inesperados. Esto se debe a que la forma en que el renderizador de gráficos de escenas 2D genera y maneja los valores de profundidad no es necesariamente compatible con la forma en que funciona una escena 3D. Esto puede acabar en choques de valores de profundidad, colisiones y fallos inesperados en las pruebas de profundidad. Por lo tanto, el enfoque robusto aquí es llamar a esta función con enable establecido en false, y desactivar las escrituras en el búfer de profundidad para el contenido 2D en QQuickWindow.
Nota: Esta bandera no es totalmente idéntica a la configuración de la variable de entorno QSG_NO_DEPTH_BUFFER. Esta bandera no controla la presencia de los buffers de profundidad. Es más relevante para el proceso de renderizado. Para forzar que no haya archivos adjuntos de profundidad/esténcil en absoluto, establezca QSG_NO_DEPTH_BUFFER y QSG_NO_STENCIL_BUFFER. Tenga en cuenta sin embargo que tal QQuickWindow, y cualquier capa de Item en ella, puede entonces volverse incompatible con items, como View3D con ciertos modos de operación, porque el contenido 3D requiere un buffer de profundidad. Llamar a esta función es siempre seguro, pero puede significar que los recursos, tales como búferes de profundidad, se crean a pesar de que no se utilizan activamente.
void QQuickGraphicsConfiguration::setDeviceExtensions(const QByteArrayList &extensions)
Establece la lista de extensions adicionales a habilitar en el dispositivo gráfico (como, por ejemplo, el VkDevice).
Cuando se renderiza con una API gráfica donde el concepto no es aplicable, extensions será ignorado.
Nota: La lista especifica extensiones adicionales, extra. Qt Quick siempre habilita extensiones que son requeridas por el gráfico de escena.
Véase también deviceExtensions().
[since 6.5] void QQuickGraphicsConfiguration::setPipelineCacheLoadFile(const QString &filename)
Establece la dirección filename desde la que se espera que QQuickWindow cargue el contenido inicial de su caché de canalización de gráficos/computación. El valor por defecto es vacío, lo que significa que la carga de la caché está deshabilitada.
Ver Pipeline Cache Save and Load para una discusión sobre cachés de pipeline.
El almacenamiento persistente de la caché de canalización puede conducir a mejoras de rendimiento en futuras ejecuciones de la aplicación, ya que la costosa compilación de shaders y los pasos de construcción de canalización pueden ser evitados.
Si y cuando ocurre la carga del contenido del archivo no está definido, aparte de que ocurrirá en algún momento durante la inicialización del scenegraph del QQuickWindow. Por lo tanto, el archivo debe seguir existiendo después de llamar a esta función. QQuickGraphicsConfiguration sólo almacena el nombre del archivo, no puede realizar ninguna operación real de E/S y gráficos por sí mismo. El trabajo real ocurrirá más tarde, posiblemente en otro hilo.
Cuando se ejecuta con una API de gráficos donde la recuperación y recarga de la caché del pipeline (o shader/programas binarios) no es aplicable o no es soportada, llamar a esta función no tiene ningún efecto.
Llamar a esta función es casi equivalente a establecer la variable de entorno QSG_RHI_PIPELINE_CACHE_LOAD a filename, con una diferencia importante: esta función controla el almacenamiento de la caché de canalización sólo para el QQuickWindow asociado. Por lo tanto, las aplicaciones con múltiples instancias de QQuickWindow o QQuickView pueden almacenar y recargar posteriormente el contenido de la caché a través de archivos dedicados a cada ventana. La variable de entorno no lo permite.
Nota: Si los datos del archivo no coinciden con el dispositivo gráfico y la versión del controlador en tiempo de ejecución, el contenido será ignorado, de forma transparente para la aplicación. Esto se aplica a un número de APIs gráficas, y las comprobaciones necesarias son realizadas por Qt. Hay excepciones, la más notable es Direct 3D 11, donde la "pipeline cache" se utiliza sólo para almacenar los resultados de la compilación HLSL->DXBC en tiempo de ejecución y por lo tanto es independiente del dispositivo y del proveedor.
Advertencia: Se supone que los datos serializados de la caché de canalización son contenido de confianza. Se recomienda a los desarrolladores de aplicaciones que nunca pasen datos de fuentes no fiables.
Esta función se introdujo en Qt 6.5.
Véase también pipelineCacheLoadFile() y setPipelineCacheSaveFile().
[since 6.5] void QQuickGraphicsConfiguration::setPipelineCacheSaveFile(const QString &filename)
Establece la dirección filename en la que se espera que QQuickWindow almacene el contenido de su caché de canalización de gráficos/computación. El valor predeterminado es vacío, lo que significa que la carga de la caché de canalización está desactivada.
Véase Pipeline Cache Save and Load para más información sobre las cachés de canalización.
El almacenamiento persistente de la caché de canalización puede conducir a mejoras de rendimiento en futuras ejecuciones de la aplicación, ya que la compilación de shaders y los pasos de construcción de canalización pueden evitarse.
Si y cuando la escritura del archivo ocurre no está definido. Lo más probable es que ocurra en algún momento de la descomposición del scenegraph debido al cierre de la ventana. Por lo tanto, las aplicaciones no deberían asumir la disponibilidad del archivo hasta que QQuickWindow se haya destruido por completo. QQuickGraphicsConfiguration sólo almacena el nombre del archivo, no realiza ninguna operación real de E/S ni de gráficos por sí mismo.
Cuando se ejecuta con una API gráfica en la que la recuperación de la caché del pipeline (o shader/programas binarios) no es aplicable o no está soportada, llamar a esta función no tiene ningún efecto.
Llamar a esta función es casi equivalente a establecer la variable de entorno QSG_RHI_PIPELINE_CACHE_SAVE a filename, con una diferencia importante: esta función controla el almacenamiento de la caché de canalización sólo para el QQuickWindow asociado. Por lo tanto, las aplicaciones con múltiples instancias de QQuickWindow o QQuickView pueden almacenar y recargar posteriormente el contenido de la caché a través de archivos dedicados a cada ventana. La variable de entorno no permite esto.
Esta función se introdujo en Qt 6.5.
Véase también pipelineCacheLoadFile() y pipelineCacheSaveFile().
[since 6.5] void QQuickGraphicsConfiguration::setPreferSoftwareDevice(bool enable)
Solicita elegir un adaptador o dispositivo físico que utilice rasterización basada en software. Aplicable solo cuando la API subyacente tiene soporte para enumerar adaptadores (por ejemplo, Direct 3D o Vulkan), y se ignora en caso contrario.
Si la implementación de la API de gráficos no dispone de tal adaptador de gráficos o dispositivo físico, se ignora la solicitud. Con Direct 3D cabe esperar que siempre esté disponible un rasterizador basado en WARP. Con Vulkan, la bandera sólo tiene efecto si Mesa's lavapipe, o algún otro dispositivo físico que informe VK_PHYSICAL_DEVICE_TYPE_CPU está disponible.
Llamar a esta función con enable a true es equivalente a establecer la variable de entorno QSG_RHI_PREFER_SOFTWARE_RENDERER a un valor distinto de cero.
El valor por defecto es false.
Esta función se introdujo en Qt 6.5.
Véase también prefersSoftwareDevice().
[since 6.6] void QQuickGraphicsConfiguration::setTimestamps(bool enable)
Cuando está activado, los datos de temporización de la GPU se recopilan de los búferes de comandos en las plataformas y API 3D que lo admiten. Estos datos se imprimen en los registros del renderizador que pueden activarse mediante la variable de entorno QSG_RENDER_TIMING o categorías de registro como qt.scenegraph.time.renderloop, y también pueden hacerse visibles para otros módulos, como el elemento DebugView de Qt Quick 3D.
Por defecto está desactivado, porque la recogida de datos puede implicar trabajo adicional, como la inserción de consultas de marca de tiempo en el flujo de comandos, dependiendo de la API gráfica subyacente. Para habilitarla, llame a esta función con enable establecido en true, o establezca la variable de entorno QSG_RHI_PROFILE en un valor distinto de cero.
Las API de gráficos que admiten esta función son Direct 3D 11, Direct 3D 12, Vulkan (siempre que la implementación subyacente de Vulkan admita consultas de marca de tiempo), Metal y OpenGL con un contexto de perfil básico o de compatibilidad para la versión 3.3 o posterior. Las marcas de tiempo no son compatibles con OpenGL ES.
Esta función se introdujo en Qt 6.6.
Véase también timestampsEnabled() y setDebugMarkers().
[since 6.6] bool QQuickGraphicsConfiguration::timestampsEnabled() const
Devuelve true si la recolección de tiempos de GPU está habilitada.
Por defecto el valor es false.
Esta función se introdujo en Qt 6.6.
Véase también setTimestamps().
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.