Qt para Windows - Aceleración de gráficos
Para que Qt Quick funcione, se requiere un controlador gráfico que soporte Direct 3D 11, Direct3D 12, Vulkan 1.0, u OpenGL 2.1 o superior. A partir de Qt 6, el controlador por defecto para Qt Quick en Windows es Direct3D 11. Esto es diferente de Qt 5, donde el valor predeterminado era OpenGL, ya sea directamente o a través de ANGLE, un traductor de OpenGL a Direct3D. ANGLE ya no se incluye con Qt en Qt 6.
Para forzar el uso del rasterizador por software de Direct3D (WARP), establezca la variable de entorno QSG_RHI_PREFER_SOFTWARE_RENDERER a 1. En algunos casos Qt Quick realizará dicho fallback automáticamente, para permitir la ejecución de aplicaciones Qt sin configuración adicional. Esto ocurre cuando los controladores no proporcionan un nivel suficiente de funcionalidad D3D11, y ocurre típicamente en máquinas virtuales que no tienen implementada la aceleración GPU y el passthrough adecuados. En caso de duda sobre qué dispositivo gráfico se está utilizando, y a la hora de solucionar problemas o informar de ellos a Qt, ejecute la aplicación con la variable de entorno QSG_INFO=1 configurada e inspeccione la salida de depuración. Ejecutar la herramienta qtdiag también puede proporcionar información útil, ya que enumera todas las API 3D disponibles.
Para solicitar el uso de Vulkan, OpenGL o Direct 3D 12, establezca la variable de entorno QSG_RHI_BACKEND en vulkan o opengl o d3d12, o utilice la equivalente C++ API en main(). Tenga en cuenta que algunas de estas API 3D pueden requerir la instalación de los controladores adecuados.
Aunque no es la predeterminada para Qt QuickOpenGL se utiliza habitualmente en muchas aplicaciones Qt, por ejemplo en aplicaciones basadas en QWidget que se basan en QOpenGLWindow o QOpenGLWidget. Las siguientes secciones cubren algunos aspectos específicos de OpenGL en una compilación Qt.
Carga dinámica de OpenGL
Qt permite elegir y cargar la implementación de OpenGL en tiempo de ejecución. Este modo es el predeterminado, y puede solicitarse explícitamente pasando -opengl dynamic al script configure.
configure -opengl dynamic
Esta configuración es la más flexible porque no hay dependencias o suposiciones sobre la implementación de OpenGL durante el tiempo de compilación. Permite un despliegue robusto de la aplicación. Cuando un entorno determinado no puede proporcionar una implementación OpenGL 2.0 adecuada, automáticamente cargará una alternativa a opengl32.dll, cuyo nombre por defecto es opengl32sw.dll. Los paquetes Qt preconfigurados incluyen una compilación de Mesa llvmpipe, una implementación de rasterizador de software de OpenGL, bajo ese nombre.
Cuando se configura con -opengl dynamic, ni Qt ni las aplicaciones construidas usando qmake o CMake enlazarán con opengl32.lib. En su lugar, la librería es elegida y cargada en tiempo de ejecución. Por defecto, Qt determinará si opengl32.dll del sistema proporciona funciones OpenGL 2. Si están presentes, opengl32.dll se cargará en tiempo de ejecución. Si están presentes, se utiliza opengl32.dll, de lo contrario intenta cargar opengl32sw.dll. Para más detalles, véase más adelante.
El mecanismo de carga puede configurarse mediante la variable de entorno QT_OPENGL y los siguientes atributos de la aplicación:
Qt::AA_UseDesktopOpenGLEquivale a establecerQT_OPENGLadesktop.Qt::AA_UseOpenGLESNo tiene efecto en Qt 6.Qt::AA_UseSoftwareOpenGLEquivale a configurarQT_OPENGLcomosoftware.
Cuando se solicita explícitamente una determinada configuración, no se realiza ninguna comprobación al iniciar la aplicación, es decir, no se examina el archivo opengl32.dll proporcionado por el sistema.
La carga dinámica tiene un impacto significativo en las aplicaciones que contienen llamadas OpenGL nativas: pueden fallar al enlazar ya que opengl32.lib no se especifica automáticamente al enlazador. En su lugar, se espera que las aplicaciones utilicen las funciones OpenGL a través de la clase QOpenGLFunctions. De este modo, se elimina la dependencia directa de la biblioteca OpenGL y todas las llamadas se dirigirán durante el tiempo de ejecución a la implementación elegida por Qt. Alternativamente, las aplicaciones son libres de hacer llamadas directas a las funciones OpenGL si añaden opengl32.lib a sus archivos de proyecto .pro: LIBS + = opengl32.lib (Visual Studio) o LIBS += -lopengl32 (Mingw-w64). El resultado es, desde la perspectiva de la aplicación, equivalente a la configuración de compilación -opengl desktop de Qt.
Qt::AA_UseSoftwareOpenGL es especial en el sentido de que intentará cargar una implementación de OpenGL con un nombre no estándar. El nombre por defecto es opengl32sw.dll. Esto permite enviar una implementación OpenGL sólo por software, por ejemplo una compilación de Mesa con llvmpipe, bajo este nombre. Si es necesario, el nombre del archivo se puede modificar configurando la variable de entorno QT_OPENGL_DLL.
Es posible proporcionar un archivo de configuración en formato JSON que especifique qué implementación de OpenGL utilizar en función de la tarjeta gráfica y la versión del controlador. La ubicación viene dada por la variable de entorno QT_OPENGL_BUGLIST. Las rutas relativas se resuelven utilizando QLibraryInfo::SettingsPath o QStandardPaths::ConfigLocation. El archivo utiliza el formato de la lista de errores de controladores utilizada en The Chromium Projects. Consiste en una lista de entradas, cada una de las cuales especifica un conjunto de condiciones y una lista de palabras clave de características. Normalmente, el id de dispositivo y el id de proveedor se utilizan para buscar una tarjeta gráfica específica. Se pueden encontrar en la salida de la herramienta qtdiag6 o dxdiag.
Las siguientes palabras clave son relevantes para elegir la implementación de OpenGL:
Nota: En Qt 6, las palabras clave relacionadas con ANGLE (disable_angle, disable_d3d11, disable_d3d9) son aceptadas, pero no tienen efecto.
disable_desktopgl- Desactiva OpenGL. Esto asegura que Qt no intente usar OpenGL normal (opengl32.dll), y que empiece con ANGLE inmediatamente. Esto es útil para evitar que malos controladores OpenGL bloqueen la aplicación.disable_rotation- Fuerza a la aplicación a ejecutarse siempre en orientación horizontal. No tiene efecto cuando se utiliza una implementación de OpenGL por software. Esto está pensado para controladores que tienen problemas con la rotación.disable_program_cache- Desactiva el almacenamiento de binarios de programas de sombreado en disco.
Un archivo de ejemplo tiene este aspecto:
{
"entries": [
{
"id": 1,
"description": "Disable D3D11 on older nVidia drivers",
"os": {
"type": "win"
},
"vendor_id": "0x10de",
"device_id": ["0x0DE9"],
"driver_version": {
"op": "<=",
"value": "8.17.12.6973"
},
"features": [
"disable_d3d11"
]
},
...Si no se especifica QT_OPENGL_BUGLIST, se utilizará una lista integrada. Esto incluye típicamente algunas tarjetas gráficas más antiguas y menos capaces con disable_desktopgl configurado, para evitar que Qt use sus inestables implementaciones OpenGL de escritorio y en su lugar vuelva a intentar cargar la librería alternativa basada en software de inmediato.
En la práctica se espera que las combinaciones más comunes sean las siguientes:
disable_desktopgl- En caso de que el sistema proporcione OpenGL 2.0 o más reciente, pero se sepa que el controlador es inestable y propenso a bloquearse.disable_desktopgldisable_angle - Cuando no se desea una ruta acelerada. Esto asegura que la única opción que Qt prueba es el rasterizador software (opengl32sw.dll). Puede ser útil en máquinas virtuales y aplicaciones que se despliegan en una amplia gama de sistemas antiguos.
Las claves soportadas para emparejar una determinada tarjeta o driver son las siguientes. Tenga en cuenta que algunas de ellas son específicas de Qt.
os.type- Sistema operativo:win,linux,macosx,androidos.version- Versión del núcleoos.release- Especifica una lista de versiones del sistema operativo en Windows:xp,vista,7,8,8.1,10.vendor_id- Proveedor del identificador del adaptadordevice_id- Lista de identificadores de dispositivos PCI.driver_version- Versión del controlador a partir del identificador del adaptadordriver_description- Coincide cuando el valor es una subcadena de la descripción del controlador del identificador del adaptador.gl_vendor- Coincide cuando el valor es una subcadena de la cadenaGL_VENDOR
Para desactivar todas las listas negras, establezca la variable de entorno QT_NO_OPENGL_BUGLIST en cualquier valor. Esto omitirá la lectura de cualquier archivo de configuración y, en su lugar, asumirá que no hay nada deshabilitado, independientemente del controlador o del sistema operativo.
Nota: Aunque no suele ser necesario, QT_NO_OPENGL_BUGLIST puede llegar a ser relevante en ciertos entornos virtuales, con múltiples, posiblemente virtuales, adaptadores gráficos presentes. Si los registros de categorías como qt.qpa.gl indican que la detección del controlador y del adaptador de pantalla lleva a deshabilitar incorrectamente OpenGL, entonces se recomienda establecer esta variable de entorno para permitir que la aplicación se ejecute normalmente. Esta variable de entorno se introdujo en Qt 5.15.
Dependencia directa de opengl32.dll
Una alternativa a las construcciones OpenGL por defecto de dynamic es depender directamente de opengl32.dll. Para este modo, pase las opciones de línea de comandos -opengl desktop al script configure.
configure -opengl desktop
Nota: El uso de EGL y OpenGL ES no está soportado en Windows. En Qt 6, OpenGL en Windows siempre implica usar WGL como interfaz del sistema de ventanas.
En tales construcciones de Qt, muchas librerías compartidas de Qt, y también aplicaciones Qt tendrán una dependencia a opengl32.dll, y por lo tanto usar una librería alternativa no es posible.
© 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.