QVulkanInstance Class
La clase QVulkanInstance representa una instancia Vulkan nativa, permitiendo el renderizado Vulkan en un QSurface. Más...
| Cabecera: | #include <QVulkanInstance> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui)target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake: | QT += gui |
- Lista de todos los miembros, incluyendo los heredados
- QVulkanInstance es parte de Renderizado en 3D.
Tipos Públicos
| DebugFilter | |
(since 6.5) enum | DebugMessageSeverityFlag { VerboseSeverity, InfoSeverity, WarningSeverity, ErrorSeverity } |
| flags | DebugMessageSeverityFlags |
(since 6.5) enum | DebugMessageTypeFlag { GeneralMessage, ValidationMessage, PerformanceMessage } |
| flags | DebugMessageTypeFlags |
(since 6.5) | DebugUtilsFilter |
| enum | Flag { NoDebugOutputRedirect, NoPortabilityDrivers } |
| flags | Flags |
Funciones Públicas
| QVulkanInstance() | |
| ~QVulkanInstance() | |
| QVersionNumber | apiVersion() const |
(since 6.5) void | clearDebugOutputFilters() |
| bool | create() |
| void | destroy() |
| QVulkanDeviceFunctions * | deviceFunctions(VkDevice device) |
| VkResult | errorCode() const |
| QByteArrayList | extensions() const |
| QVulkanInstance::Flags | flags() const |
| QVulkanFunctions * | functions() const |
| PFN_vkVoidFunction | getInstanceProcAddr(const char *name) |
(since 6.5) void | installDebugOutputFilter(QVulkanInstance::DebugUtilsFilter filter) |
| void | installDebugOutputFilter(QVulkanInstance::DebugFilter filter) |
| bool | isValid() const |
| QByteArrayList | layers() const |
| void | presentAboutToBeQueued(QWindow *window) |
| void | presentQueued(QWindow *window) |
| void | removeDebugOutputFilter(QVulkanInstance::DebugFilter filter) |
| void | resetDeviceFunctions(VkDevice device) |
| void | setApiVersion(const QVersionNumber &vulkanVersion) |
| void | setExtensions(const QByteArrayList &extensions) |
| void | setFlags(QVulkanInstance::Flags flags) |
| void | setLayers(const QByteArrayList &layers) |
| void | setVkInstance(VkInstance existingVkInstance) |
| QVersionNumber | supportedApiVersion() const |
| QVulkanInfoVector<QVulkanExtension> | supportedExtensions() const |
| QVulkanInfoVector<QVulkanLayer> | supportedLayers() const |
| bool | supportsPresent(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, QWindow *window) |
| VkInstance | vkInstance() const |
Miembros públicos estáticos
| VkSurfaceKHR | surfaceForWindow(QWindow *window) |
Descripción detallada
Vulkan es una API explícita de gráficos y computación multiplataforma. Esta clase proporciona soporte para cargar una librería Vulkan y crear un instance de forma multiplataforma. Para una introducción a las instancias Vulkan, consulte la sección 3.2 de la especificación.
Nota: El soporte específico de plataforma para instancias Vulkan y ventanas con superficies compatibles con Vulkan lo proporcionan los distintos plugins de plataforma. Sin embargo, no todas ellas soportan Vulkan. Cuando se ejecuta en una plataforma de este tipo, create() fallará y siempre devolverá false.
Nota: El soporte de Vulkan puede ser desactivado automáticamente para una determinada compilación de Qt debido a no tener las cabeceras Vulkan necesarias disponibles en el momento de la compilación. Cuando este es el caso, y la salida de configure indica que el soporte Vulkan está deshabilitado, las clases QVulkan* no estarán disponibles.
Nota: Algunas funciones cambiaron su firma entre las distintas revisiones de las cabeceras Vulkan. Cuando se construye Qt y sólo las cabeceras con las antiguas firmas conflictivas están presentes en un sistema, el soporte Vulkan será deshabilitado. Se recomienda usar cabeceras de Vulkan 1.0.39 o posteriores.
Inicialización
De forma similar a QOpenGLContext, la creación de una instancia Vulkan sólo ocurre cuando se llama a create(). Esto permite usar QVulkanInstance como una simple variable miembro mientras se mantiene el control sobre cuando realizar la inicialización.
La consulta de las capas y extensiones soportadas a nivel de instancia es posible llamando a supportedLayers() y supportedExtensions(). Esto asegura que la librería Vulkan está cargada, y por lo tanto puede ser llamada de forma segura antes de create().
Las instancias almacenan el estado Vulkan por aplicación y la creación de un objeto VkInstance inicializa la biblioteca Vulkan. En la práctica, normalmente habrá una única instancia construida al principio de main(). El objeto permanece vivo hasta que se sale de la aplicación.
Cada QWindow basado en Vulkan debe ser asociado con una QVulkanInstance llamando a QWindow::setVulkanInstance(). Así, un patrón típico de aplicación es el siguiente:
int main(int argc, char **argv) { QGuiApplication app(argc, argv); QVulkanInstance inst; if (!inst.create()) return 1; // ... window->setVulkanInstance(&inst); window->show(); return app.exec(); }
Configuración
QVulkanInstance habilita automáticamente el conjunto mínimo de extensiones que necesita en la instancia recién creada. En la práctica esto significa la familia de extensiones VK_KHR_*_surface.
Por defecto, la salida de depuración de Vulkan, por ejemplo los mensajes de las capas de validación, son enviados a qDebug(). Esto puede ser desactivado pasando la bandera NoDebugOutputRedirect a setFlags() antes de invocar create().
Para habilitar capas y extensiones adicionales, proporcione la lista a través de setLayers() y setExtensions() antes de invocar create(). Si la instancia no indica que una capa o extensión determinada está disponible, se ignora la solicitud. Tras una llamada satisfactoria a create(), los valores devueltos por funciones como layers() y extensions() reflejan las capas y extensiones realmente habilitadas. Cuando sea necesario, por ejemplo para evitar solicitar extensiones que entren en conflicto y por lo tanto fallen en la creación de la instancia Vulkan, la lista de capas y extensiones realmente soportadas puede ser examinada a través de supportedLayers() y supportedExtensions() antes de llamar a create().
Por ejemplo, para habilitar las capas de validación estándar, se podría hacer lo siguiente:
QVulkanInstance inst; // Enable validation layer, if supported. Messages go to qDebug by default. inst.setLayers({ "VK_LAYER_KHRONOS_validation" }); bool ok = inst.create(); if (!ok) { // ... Vulkan not available } if (!inst.layers().contains("VK_LAYER_KHRONOS_validation")) { // ... validation layer not available }
O, alternativamente, para tomar decisiones antes de intentar crear una instancia Vulkan:
QVulkanInstance inst; if (inst.supportedLayers().contains("VK_LAYER_KHRONOS_validation")) { // ... } bool ok = inst.create(); // ...
Adoptar una instancia existente
Por defecto QVulkanInstance crea una nueva instancia Vulkan. Cuando se trabaja con motores y renderizadores externos, esto puede a veces no ser deseable. Cuando ya exista un manejador VkInstance disponible, llama a setVkInstance() antes de invocar a create(). De esta forma no se crearán instancias adicionales, y QVulkanInstance no poseerá el handle.
Nota: Es responsabilidad del componente que crea la instancia externa asegurarse de que las extensiones necesarias están habilitadas. Estas son: VK_KHR_surface, la específica de WSI VK_KHR_*_surface que sea apropiada para la plataforma en cuestión, y VK_EXT_debug_utils en caso de que se desee la redirección de la salida de depuración de QVulkanInstance.
Acceso a los comandos principales de Vulkan
Para acceder al handle VkInstance que envuelve a QVulkanInstance, llama a vkInstance(). Para resolver funciones Vulkan, llama a getInstanceProcAddr(). Para los comandos principales de Vulkan no es necesaria la resolución manual, ya que se proporcionan a través de los objetos QVulkanFunctions y QVulkanDeviceFunctions accesibles a través de functions() y deviceFunctions().
Nota: QVulkanFunctions y QVulkanDeviceFunctions se generan a partir de las especificaciones XML de la API Vulkan cuando se construyen las librerías Qt. Por lo tanto, no se proporciona documentación para ellos. Contienen las funciones Vulkan 1.2 con las mismas firmas que se describen en la documentación de la API Vulkan.
Obtener una superficie Vulkan nativa para una ventana
Las dos operaciones comunes específicas del sistema de ventanas son obtener una superficie (un manejador VkSurfaceKHR ) para una ventana, y consultar si una familia de colas dada soporta la presentación a una superficie dada. Para evitar bits específicos de WSI en las aplicaciones, estos son abstraídos por QVulkanInstance y las capas QPA subyacentes.
Para crear una superficie Vulkan para una ventana, o recuperar una existente, llama a surfaceForWindow(). La mayoría de las plataformas sólo crearán la superficie a través de VK_KHR_*_surface cuando se llame por primera vez a surfaceForWindow(), pero puede haber variaciones específicas de la plataforma en el comportamiento interno. Una vez creada, las siguientes llamadas a surfaceForWindow() simplemente devuelven el mismo handle. Esto se ajusta bien a la estructura de las subclases típicas de QWindow habilitadas para Vulkan.
Para consultar si una familia de colas determinada dentro de un dispositivo físico puede utilizarse para realizar una presentación en una superficie determinada, llame a supportsPresent(). Esto encapsula tanto las comprobaciones genéricas vkGetPhysicalDeviceSurfaceSupportKHR como las específicas de WSI vkGetPhysicalDevice*PresentationSupportKHR.
Resolución de problemas
Además de devolver false desde create() o 0 desde surfaceForWindow(), los errores críticos también se imprimirán en la salida de depuración a través de qWarning(). Se puede solicitar un registro adicional activando la salida de depuración para la categoría de registro qt.vulkan. El código de error Vulkan real de la creación de la instancia puede recuperarse llamando a errorCode() después de que falle create().
En algunos casos especiales puede ser necesario sobrescribir el nombre de la biblioteca Vulkan. Esto se puede conseguir configurando la variable de entorno QT_VULKAN_LIB.
Ejemplo
El siguiente es el esquema básico de la creación de un Vulkan-capaz QWindow:
clase VulkanWindow : public QWindow {public: VulkanWindow() { setSurfaceType(VulkanSurface); } void exposeEvent(QExposeEvent *) { if (isExposed()) { if (!m_initialized) { m_initialized = true; // inicializar dispositivo, swapchain, etc. QVulkanInstance *inst = vulkanInstance(); QVulkanFunctions *f = inst->functions(); uint32_t devCount = 0; f->vkEnumeratePhysicalDevices(inst->vkInstance(), &devCount, nullptr); // ... // construye el primer framerender(); } } } bool event(QEvent *e) { if (e->type() == QEvent::UpdateRequest) render(); return QWindow::event(e); } void render() { // ...requestUpdate(); // render continuamente}private: bool m_initialized = false; };int main(int argc, char**argv) { QGuiApplication app(argc, argv); QVulkanInstance inst; if (!inst.create()) { qWarning("Vulkan not available"); return 1; } VulkanWindow window; window.showMaximized(); return app.exec(); }
Nota: Además de exponer, una implementación de ventana que se comporte bien también tendrá que ocuparse de eventos adicionales como redimensionar y QPlatformSurfaceEvent para asegurar una gestión adecuada de la cadena de intercambio. Adicionalmente, algunas plataformas pueden requerir liberar recursos cuando dejan de estar expuestos.
Uso de C++ Bindings para Vulkan
También es posible combinar los habilitadores Vulkan de Qt con un wrapper Vulkan de C++, por ejemplo Vulkan-Hpp. El prerrequisito aquí es que la capa C++ debe ser capaz de adoptar handles nativos (VkInstance, VkSurfaceKHR) en sus clases sin tomar propiedad (ya que la propiedad permanece con QVulkanInstance y QWindow). Considera también lo siguiente:
- Algunas envolturas requieren que se habilite el soporte de excepciones. Qt no usa excepciones. Para habilitar excepciones para la aplicación, agrega
CONFIG += exceptionsal archivo.pro. - Algunas envolturas llaman directamente a funciones Vulkan, asumiendo que
vulkan.hproporciona prototipos y la aplicación enlaza a una librería Vulkan que exporta todos los símbolos necesarios. Qt puede no enlazar directamente con una librería Vulkan. Por lo tanto, en algunas plataformas puede ser necesario añadirLIBS += -lvulkano similar en el archivo.prode la aplicación. - Las cabeceras de las clases QVulkan pueden incluir
vulkan.hconVK_NO_PROTOTYPESactivado. Esto puede causar problemas en las cabeceras C++ wrapper que dependen de los prototipos. Por lo tanto en el código de la aplicación puede ser necesario incluirvulkan.hppo similar antes de cualquiera de las cabeceras QVulkan.
Ver también QVulkanFunctions y QSurface::SurfaceType.
Documentación de tipos de miembros
QVulkanInstance::DebugFilter
Typedef para funciones de retrollamada de filtrado de depuración, con la siguiente firma:
bool myDebugFilter(VkDebugReportFlagsEXT flags, VkDebugReportObjectTypeEXT objectType, uint64_t object, size_t location, int32_t messageCode, const char *pLayerPrefix, const char *pMessage)
Devolver true suprime la impresión del mensaje.
Nota: A partir de Qt 6.5 se utiliza VK_EXT_debug_utils en lugar del obsoleto VK_EXT_debug_report. La firma del callback se basa en VK_EXT_debug_report. Por lo tanto, ya no se puede esperar que todos los argumentos sean válidos. Evite confiar en argumentos distintos de pMessage, messageCode, y object. Las aplicaciones que deseen acceder a todos los datos de callback como se especifica en VK_EXT_debug_utils deben migrar a DebugUtilsFilter.
Véase también installDebugOutputFilter() y removeDebugOutputFilter().
[since 6.5] enum QVulkanInstance::DebugMessageSeverityFlag
flags QVulkanInstance::DebugMessageSeverityFlags
| Constante | Valor |
|---|---|
QVulkanInstance::VerboseSeverity | 0x01 |
QVulkanInstance::InfoSeverity | 0x02 |
QVulkanInstance::WarningSeverity | 0x04 |
QVulkanInstance::ErrorSeverity | 0x08 |
Este enum fue introducido en Qt 6.5.
El tipo DebugMessageSeverityFlags es un typedef para QFlags<DebugMessageSeverityFlag>. Almacena una combinación OR de valores DebugMessageSeverityFlag.
[since 6.5] enum QVulkanInstance::DebugMessageTypeFlag
flags QVulkanInstance::DebugMessageTypeFlags
| Constante | Valor |
|---|---|
QVulkanInstance::GeneralMessage | 0x01 |
QVulkanInstance::ValidationMessage | 0x02 |
QVulkanInstance::PerformanceMessage | 0x04 |
Este enum fue introducido en Qt 6.5.
El tipo DebugMessageTypeFlags es un typedef para QFlags<DebugMessageTypeFlag>. Almacena una combinación OR de valores DebugMessageTypeFlag.
[alias, since 6.5] QVulkanInstance::DebugUtilsFilter
Typedef para funciones de callback de filtrado de depuración, con la siguiente firma:
std::function<bool(DebugMessageSeverityFlags severity, DebugMessageTypeFlags type, const void *message)>;
El argumento message es un puntero a la estructura VkDebugUtilsMessengerCallbackDataEXT. Consulte la documentación de VK_EXT_debug_utils para más detalles. Las cabeceras Qt no utilizan el tipo real para evitar introducir una dependencia en las cabeceras Vulkan post-1.0.
Devolver true suprime la impresión del mensaje.
Este typedef se introdujo en Qt 6.5.
Ver también installDebugOutputFilter() y removeDebugOutputFilter().
enum QVulkanInstance::Flag
flags QVulkanInstance::Flags
Este enum describe las banderas que pueden ser pasadas a setFlags(). Estos controlan el comportamiento de create().
| Constante | Valor | Descripción |
|---|---|---|
QVulkanInstance::NoDebugOutputRedirect | 0x01 | Desactiva la redirección de la salida de depuración Vulkan (VK_EXT_debug_utils) a qDebug. |
QVulkanInstance::NoPortabilityDrivers (since Qt 6.5) | 0x02 | Desactiva la enumeración de dispositivos físicos marcados como Vulkan Portability. |
El tipo Flags es un typedef para QFlags<Flag>. Almacena una combinación OR de valores Flag.
Documentación de la Función Miembro
QVulkanInstance::QVulkanInstance()
Construye una nueva instancia.
Nota: No se realiza ninguna inicialización Vulkan en el constructor.
[noexcept] QVulkanInstance::~QVulkanInstance()
Destructor.
Nota: vkInstance() devolverá nullptr una vez destruida la instancia.
QVersionNumber QVulkanInstance::apiVersion() const
Devuelve la versión solicitada de la API Vulkan contra la que la aplicación espera ejecutarse, o un número de versión nulo si setApiVersion() no fue llamada antes de create().
Véase también setApiVersion().
[since 6.5] void QVulkanInstance::clearDebugOutputFilters()
Elimina todas las funciones de filtro instaladas previamente por installDebugOutputFilter().
Nota: Esta función puede ser llamada antes de create().
Esta función se introdujo en Qt 6.5.
Véase también installDebugOutputFilter().
bool QVulkanInstance::create()
Inicializa la biblioteca Vulkan y crea una instancia Vulkan nueva o adopta una existente.
Devuelve true en caso de éxito, false en caso de error o cuando Vulkan no está soportado.
Si tiene éxito, el puntero a este QVulkanInstance es recuperable a través de vkInstance().
La instancia Vulkan y la biblioteca están disponibles mientras exista este QVulkanInstance, o hasta que se llame a destroy().
Por defecto, la VkInstance se crea con el flag VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR activado. Esto significa que los dispositivos físicos de Portabilidad Vulkan son enumerados también. Si esto no se desea, establezca la bandera NoPortabilityDrivers.
void QVulkanInstance::destroy()
Destruye la instancia de la plataforma subyacente, destruyendo así la VkInstance (cuando se posee). El objeto QVulkanInstance sigue siendo reutilizable llamando de nuevo a create().
QVulkanDeviceFunctions *QVulkanInstance::deviceFunctions(VkDevice device)
Devuelve el objeto QVulkanDeviceFunctions que expone el conjunto de comandos Vulkan del núcleo a nivel de dispositivo y está garantizado para ser funcional multiplataforma.
Nota: Las funciones Vulkan en el objeto devuelto sólo deben ser llamadas con device o un objeto hijo (VkQueue, VkCommandBuffer) de device como su primer parámetro. Esto se debe a que estas funciones se resuelven a través de vkGetDeviceProcAddr con el fin de evitar la sobrecarga potencial de despacho interno.
Nota: El objeto devuelto es propiedad y está gestionado por QVulkanInstance. No lo destruya ni lo altere.
Nota: El objeto se almacena en caché, por lo que volver a llamar a esta función con el mismo device es una operación barata. Sin embargo, cuando el dispositivo se destruye, es la aplicación la que debe notificarlo a QVulkanInstance llamando a resetDeviceFunctions().
Las funciones del núcleo de la API Vulkan 1.0 estarán siempre disponibles. Cuando se trata de versiones superiores de Vulkan, tales como, 1.1 y 1.2, el objeto QVulkanDeviceFunctions intentará resolver las funciones del núcleo de la API para estos también, pero si el dispositivo físico Vulkan en tiempo de ejecución no tiene soporte para estos, llamar a cualquier función no soportada dará lugar a un comportamiento no especificado. Para habilitar correctamente la compatibilidad con versiones de Vulkan superiores a la 1.0, puede ser necesario establecer una versión de API de instancia adecuada llamando a setApiVersion() antes de create(). Además, se espera que las aplicaciones comprueben el dispositivo físico apiVersion en VkPhysicalDeviceProperties.
Véase también functions() y resetDeviceFunctions().
VkResult QVulkanInstance::errorCode() const
Devuelve el código de error de Vulkan después de un create() fallido, VK_SUCCESS en caso contrario.
El valor es típicamente el valor de retorno de vkCreateInstance() (cuando se crea una nueva instancia Vulkan en lugar de adoptar una existente), pero también puede ser VK_NOT_READY si el plugin de plataforma no soporta Vulkan.
QByteArrayList QVulkanInstance::extensions() const
Devuelve las extensiones de instancia habilitadas, si se llamó a create() y tuvo éxito. Las extensiones solicitadas en caso contrario.
Véase también setExtensions().
QVulkanInstance::Flags QVulkanInstance::flags() const
Devuelve las banderas solicitadas.
Véase también setFlags().
QVulkanFunctions *QVulkanInstance::functions() const
Devuelve el objeto QVulkanFunctions correspondiente que expone el conjunto de comandos principales de Vulkan, excluyendo las funciones de nivel de dispositivo, y se garantiza que sea funcional en todas las plataformas.
Nota: El objeto devuelto es propiedad y está gestionado por QVulkanInstance. No lo destruya ni lo altere.
Las funciones del núcleo de la API Vulkan 1.0 estarán siempre disponibles. Cuando se trate de versiones superiores de Vulkan, como 1.1 y 1.2, el objeto QVulkanFunctions intentará resolver también las funciones de la API del núcleo para esas versiones, pero si la implementación de la instancia Vulkan en tiempo de ejecución no tiene soporte para esas funciones, la llamada a cualquier función no soportada provocará un comportamiento no especificado. Además, para habilitar correctamente la compatibilidad con versiones de Vulkan superiores a la 1.0, puede ser necesario establecer una versión de API de instancia adecuada llamando a setApiVersion() antes de create(). Para consultar la versión a nivel de instancia de la implementación de Vulkan, llame a supportedApiVersion().
Véase también deviceFunctions() y supportedApiVersion().
PFN_vkVoidFunction QVulkanInstance::getInstanceProcAddr(const char *name)
Resuelve la función Vulkan con la dirección name.
Para los comandos principales de Vulkan, es preferible utilizar las envolturas de funciones recuperables de functions() y deviceFunctions().
[since 6.5] void QVulkanInstance::installDebugOutputFilter(QVulkanInstance::DebugUtilsFilter filter)
Instala una función filter que es llamada para cada mensaje de depuración Vulkan. Cuando la llamada de retorno devuelve true, el mensaje se detiene (se filtra) y no aparecerá en la salida de depuración.
Nota: El filtrado sólo es efectivo cuando NoDebugOutputRedirect no es set. La instalación de filtros no tiene efecto en caso contrario.
Nota: Esta función puede ser llamada antes de create().
Esta función se introdujo en Qt 6.5.
Véase también clearDebugOutputFilters().
void QVulkanInstance::installDebugOutputFilter(QVulkanInstance::DebugFilter filter)
Instala una función filter que es llamada para cada mensaje de depuración Vulkan. Cuando la llamada de retorno devuelve true, el mensaje se detiene (se filtra) y no aparecerá en la salida de depuración.
Nota: El filtrado sólo es efectivo cuando NoDebugOutputRedirect no es set. La instalación de filtros no tiene efecto en caso contrario.
Nota: Esta función puede ser llamada antes de create().
Se trata de una función sobrecargada.
Véase también removeDebugOutputFilter().
bool QVulkanInstance::isValid() const
Devuelve true si create() tuvo éxito y la instancia es válida.
QByteArrayList QVulkanInstance::layers() const
Devuelve las capas de instancia habilitadas, si se llamó a create() y tuvo éxito. Las capas solicitadas en caso contrario.
Véase también setLayers().
void QVulkanInstance::presentAboutToBeQueued(QWindow *window)
Esta función debe ser llamada por el renderizador de la aplicación antes de poner en cola una operación presente para window.
Mientras que en algunas plataformas esto será un no-op, algunas pueden realizar una sincronización dependiente del sistema de ventanas. Por ejemplo, en Wayland esto añadirá enviar una petición wl_surface.frame para evitar que el controlador se bloquee por ventanas minimizadas.
void QVulkanInstance::presentQueued(QWindow *window)
Esta función debe ser llamada por el renderizador de la aplicación después de poner en cola una operación presente para window.
Mientras que en algunas plataformas esto será un no-op, algunas pueden realizar una sincronización dependiente del sistema de ventanas. Por ejemplo, en X11 esto actualizará _NET_WM_SYNC_REQUEST_COUNTER.
void QVulkanInstance::removeDebugOutputFilter(QVulkanInstance::DebugFilter filter)
Elimina una función filter previamente instalada por installDebugOutputFilter().
Nota: Esta función puede ser llamada antes de create().
Véase también installDebugOutputFilter().
void QVulkanInstance::resetDeviceFunctions(VkDevice device)
Invalida y destruye el objeto QVulkanDeviceFunctions para el device dado.
Esta función debe ser llamada cuando un VkDevice, para el cual deviceFunctions() fue llamado, es destruido mientras la aplicación intenta continuar ejecutándose, posiblemente creando un nuevo dispositivo Vulkan lógico más tarde.
No es necesario llamar a esta función antes de destruir QVulkanInstance ya que la limpieza se realiza automáticamente.
Véase también deviceFunctions().
void QVulkanInstance::setApiVersion(const QVersionNumber &vulkanVersion)
Especifica la versión más alta de la API Vulkan que la aplicación está diseñada para utilizar.
Por defecto vulkanVersion es 0, que corresponde a Vulkan 1.0.
Nota: Esta función sólo puede ser llamada antes de create() y no tiene efecto si se llama después.
Nota: Tenga en cuenta que Vulkan 1.1 cambia el comportamiento con respecto al campo Vulkan API version. En Vulkan 1.0 especificar un vulkanVersion no soportado llevaba a fallar create() con VK_ERROR_INCOMPATIBLE_DRIVER, tal y como mandaba la especificación. A partir de Vulkan 1.1, la especificación no permite esto, el controlador debe aceptar cualquier versión sin fallar la creación de la instancia.
Se recomienda a los desarrolladores de aplicaciones que se familiaricen con las notas de apiVersion en la especificación Vulkan.
Véase también apiVersion() y supportedApiVersion().
void QVulkanInstance::setExtensions(const QByteArrayList &extensions)
Especifica la lista de instancias adicionales extensions a habilitar. Es seguro especificar extensiones no soportadas también porque estas son ignoradas cuando no son soportadas en tiempo de ejecución.
Nota: Las extensiones relacionadas con superficies requeridas por Qt (por ejemplo, VK_KHR_win32_surface) siempre se añadirán automáticamente, no es necesario incluirlas en esta lista.
Nota: VK_KHR_portability_enumeration se añade automáticamente a menos que se establezca la bandera NoPortabilityDrivers. Este valor se introdujo en Qt 6.5.
Nota: Esta función sólo puede llamarse antes de create() y no tiene efecto si se llama después.
Véase también extensions().
void QVulkanInstance::setFlags(QVulkanInstance::Flags flags)
Configura el comportamiento de create() basándose en el flags proporcionado.
Nota: Esta función sólo puede llamarse antes de create() y no tiene efecto si se llama después.
Véase también flags().
void QVulkanInstance::setLayers(const QByteArrayList &layers)
Especifica la lista de instancias layers a habilitar. Es seguro especificar también las capas no soportadas porque éstas se ignoran cuando no son soportadas en tiempo de ejecución.
Nota: Esta función sólo puede llamarse antes de create() y no tiene efecto si se llama después.
Véase también layers().
void QVulkanInstance::setVkInstance(VkInstance existingVkInstance)
Hace que QVulkanInstance adopte un manejador VkInstance existente en lugar de crear uno nuevo.
Nota: existingVkInstance debe tener al menos VK_KHR_surface y las extensiones específicas de WSI VK_KHR_*_surface habilitadas. Para asegurar que la redirección de la salida de depuración es funcional, se necesita también VK_EXT_debug_utils.
Nota: Esta función sólo puede invocarse antes de create() y no tiene efecto si se invoca después.
Véase también vkInstance().
QVersionNumber QVulkanInstance::supportedApiVersion() const
Devuelve la versión de la funcionalidad a nivel de instancia soportada por la implementación de Vulkan.
En la práctica este es el valor devuelto por vkEnumerateInstanceVersion, si esa función está disponible (con Vulkan 1.1 y posteriores), o 1.0.
Las aplicaciones que quieran bifurcar su característica Vulkan y el uso de la API basándose en qué versión de Vulkan está disponible en tiempo de ejecución, pueden usar esta función para determinar qué versión pasar a setApiVersion() antes de llamar a create().
Nota: Esta función puede ser llamada antes de create().
Véase también setApiVersion().
QVulkanInfoVector<QVulkanExtension> QVulkanInstance::supportedExtensions() const
Devuelve la lista de extensiones a nivel de instancia soportadas.
Nota: Esta función puede invocarse antes de create().
QVulkanInfoVector<QVulkanLayer> QVulkanInstance::supportedLayers() const
Devuelve la lista de capas de nivel de instancia soportadas.
Nota: Esta función puede invocarse antes de create().
bool QVulkanInstance::supportsPresent(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, QWindow *window)
Devuelve true si la familia de colas con queueFamilyIndex dentro de physicalDevice admite la presentación a window.
Llama a esta función cuando examina las colas de un dispositivo Vulkan dado, con el fin de decidir qué cola se puede utilizar para realizar la presentación.
[static] VkSurfaceKHR QVulkanInstance::surfaceForWindow(QWindow *window)
Crea o recupera el manejador VkSurfaceKHR ya existente para el window dado.
Devuelve el manejador de superficie Vulkan o 0 si falla.
VkInstance QVulkanInstance::vkInstance() const
Devuelve el manejador VkInstance que envuelve este QVulkanInstance, o nullptr si create() no ha sido llamado con éxito y no se ha proporcionado una instancia existente a través de setVkInstance().
Véase también setVkInstance().
© 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.