En esta página

QVulkanWindowRenderer Class

La clase QVulkanWindowRenderer se utiliza para implementar la lógica de renderizado específica de la aplicación para un QVulkanWindow. Más...

Cabecera: #include <QVulkanWindowRenderer>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui

Funciones públicas

virtual ~QVulkanWindowRenderer()
virtual void initResources()
virtual void initSwapChainResources()
virtual void logicalDeviceLost()
virtual void physicalDeviceLost()
virtual void preInitResources()
virtual void releaseResources()
virtual void releaseSwapChainResources()
virtual void startNextFrame() = 0

Descripción Detallada

Las aplicaciones suelen subclasificar tanto QVulkanWindow como QVulkanWindowRenderer. La primera permite manejar eventos, por ejemplo, de entrada, mientras que la segunda permite implementar la gestión de recursos Vulkan y la construcción del buffer de comandos que conforman el renderizado de la aplicación.

Además del manejo de eventos, la subclase QVulkanWindow es responsable de proporcionar también una implementación para QVulkanWindow::createRenderer(). Aquí es donde la ventana y el renderizador se conectan. Una implementación típica simplemente creará una nueva instancia de una subclase de QVulkanWindowRenderer.

Documentación de Funciones Miembro

[virtual noexcept] QVulkanWindowRenderer::~QVulkanWindowRenderer()

Destructor virtual.

[virtual] void QVulkanWindowRenderer::initResources()

Esta función virtual es llamada cuando llega el momento de crear los recursos gráficos del renderizador.

Dependiendo de la bandera QVulkanWindow::PersistentResources, situaciones de pérdida de dispositivo, etc. esta función puede ser llamada más de una vez durante el tiempo de vida de un QVulkanWindow. Sin embargo, las invocaciones posteriores siempre son precedidas por una llamada a releaseResources().

Accesores como device(), graphicsQueue() y graphicsCommandPool() sólo están garantizados para devolver valores válidos dentro de esta función y después, hasta que se llame a releaseResources().

La implementación por defecto está vacía.

[virtual] void QVulkanWindowRenderer::initSwapChainResources()

Esta función virtual es llamada cuando se puede realizar una inicialización relacionada con swapchain, framebuffer o renderpass. La cadena de intercambio y los recursos relacionados son reiniciados y luego recreados en respuesta a eventos de redimensionamiento de la ventana, y por lo tanto un par de llamadas a initResources() y releaseResources() pueden tener múltiples llamadas a initSwapChainResources() y releaseSwapChainResources() entre ellas.

Accesores como QVulkanWindow::swapChainImageSize() sólo están garantizados para devolver valores válidos dentro de esta función y después, hasta que se llame a releaseSwapChainResources().

Este es también el lugar donde los cálculos dependientes del tamaño (por ejemplo, la matriz de proyección) deben hacerse ya que esta función es llamada efectivamente en cada cambio de tamaño.

La implementación por defecto está vacía.

[virtual] void QVulkanWindowRenderer::logicalDeviceLost()

Esta función virtual es llamada cuando el dispositivo lógico (VkDevice) se pierde, lo que significa que alguna operación falló con VK_ERROR_DEVICE_LOST.

La implementación por defecto es vacía.

Normalmente no hay necesidad de realizar nada especial en esta función. QVulkanWindow liberará automáticamente todos los recursos (invocando releaseSwapChainResources() y releaseResources() según sea necesario) e intentará reinicializar, adquiriendo un nuevo dispositivo. Si el dispositivo físico también se perdió, este intento de reinicialización puede resultar en physicalDeviceLost().

Véase también physicalDeviceLost().

[virtual] void QVulkanWindowRenderer::physicalDeviceLost()

Se llama a esta función virtual cuando se pierde el dispositivo físico, lo que significa que la creación del dispositivo lógico falla con VK_ERROR_DEVICE_LOST.

La implementación por defecto está vacía.

Normalmente no es necesario realizar nada especial en esta función porque QVulkanWindow volverá a intentar inicializarse automáticamente después de un cierto tiempo.

Véase también logicalDeviceLost().

[virtual] void QVulkanWindowRenderer::preInitResources()

Esta función virtual se llama justo antes de que comience la inicialización de los gráficos, que termina llamando a initResources().

Normalmente no hay necesidad de reimplementar esta función. Sin embargo, hay casos que implican decisiones basadas tanto en el dispositivo físico como en la superficie. Éstas no pueden realizarse normalmente antes de hacer visible QVulkanWindow ya que la superficie Vulkan no es recuperable en ese momento.

En su lugar, las aplicaciones pueden reimplementar esta función. Aquí tanto QVulkanWindow::physicalDevice() como QVulkanInstance::surfaceForWindow() son funcionales, pero aún no se ha realizado ninguna inicialización del dispositivo lógico.

La implementación por defecto está vacía.

[virtual] void QVulkanWindowRenderer::releaseResources()

Esta función virtual es llamada cuando los recursos gráficos del renderizador deben ser liberados.

La implementación debe estar preparada para que una llamada a esta función pueda ir seguida de una initResources() en un momento posterior.

QVulkanWindow se encarga de esperar a que el dispositivo quede inactivo antes y después de invocar a esta función.

La implementación por defecto está vacía.

[virtual] void QVulkanWindowRenderer::releaseSwapChainResources()

Esta función virtual es llamada cuando los recursos relacionados con swapchain, framebuffer o renderpass deben ser liberados.

La implementación debe estar preparada para que una llamada a esta función pueda ser seguida por una nueva llamada a initSwapChainResources() en un momento posterior.

QVulkanWindow se encarga de esperar a que el dispositivo quede inactivo antes y después de invocar esta función.

La implementación por defecto está vacía.

Nota: Este es el último lugar donde se actúa con todos los recursos gráficos intactos antes de que QVulkanWindow comience a liberarlos. Por lo tanto, es esencial que las implementaciones con un startNextFrame() asíncrono y potencialmente multihilo realicen una espera de bloqueo y llamen a QVulkanWindow::frameReady() antes de volver de esta función en caso de que haya un envío de fotogramas pendiente.

[pure virtual] void QVulkanWindowRenderer::startNextFrame()

Esta función virtual es llamada cuando las llamadas a dibujo para el siguiente frame deben ser añadidas al buffer de comandos.

Cada llamada a esta función debe ir seguida de una llamada a QVulkanWindow::frameReady(). De lo contrario, el bucle de renderizado se detendrá. La llamada también se puede hacer en un momento posterior, después de volver de esta función. Esto significa que es posible iniciar un trabajo asíncrono, y sólo actualizar el buffer de comandos y notificar a QVulkanWindow cuando ese trabajo haya terminado.

Todos los recursos Vulkan están inicializados y listos cuando esta función es invocada. El framebuffer actual y el buffer de comandos principal pueden ser recuperados a través de QVulkanWindow::currentFramebuffer() y QVulkanWindow::currentCommandBuffer(). El dispositivo lógico y la cola de gráficos activa están disponibles a través de QVulkanWindow::device() y QVulkanWindow::graphicsQueue(). Las implementaciones pueden crear buffers de comandos adicionales a partir del pool devuelto por QVulkanWindow::graphicsCommandPool(). Por conveniencia, el índice de un host visible y el índice de tipo de memoria local del dispositivo están expuestos a través de QVulkanWindow::hostVisibleMemoryIndex() y QVulkanWindow::deviceLocalMemoryIndex(). Todos estos accessors son seguros para ser llamados desde cualquier thread.

Véase también QVulkanWindow::frameReady() y QVulkanWindow.

© 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.