En esta página

QRhiSwapChain Class

Recurso Swapchain. Más...

Cabecera: #include <rhi/qrhi.h>
CMake: find_package(Qt6 REQUIRED COMPONENTS GuiPrivate)
target_link_libraries(mytarget PRIVATE Qt6::GuiPrivate)
qmake: QT += gui-private
Desde: Qt 6.6
Hereda: QRhiResource

Tipos Públicos

enum Flag { SurfaceHasPreMulAlpha, SurfaceHasNonPreMulAlpha, sRGB, UsedAsTransferSource, NoVSync, MinimalBufferCount }
flags Flags
enum Format { SDR, HDRExtendedSrgbLinear, HDR10, HDRExtendedDisplayP3Linear }
enum StereoTargetBuffer { LeftBuffer, RightBuffer }

Funciones Públicas

virtual bool createOrResize() = 0
virtual QRhiCommandBuffer *currentFrameCommandBuffer() = 0
virtual QRhiRenderTarget *currentFrameRenderTarget() = 0
virtual QRhiRenderTarget *currentFrameRenderTarget(QRhiSwapChain::StereoTargetBuffer targetBuffer)
QSize currentPixelSize() const
QRhiRenderBuffer *depthStencil() const
QRhiSwapChain::Flags flags() const
QRhiSwapChain::Format format() const
virtual QRhiSwapChainHdrInfo hdrInfo()
virtual bool isFormatSupported(QRhiSwapChain::Format f) = 0
virtual QRhiRenderPassDescriptor *newCompatibleRenderPassDescriptor() = 0
QRhiSwapChainProxyData proxyData() const
QRhiRenderPassDescriptor *renderPassDescriptor() const
int sampleCount() const
void setDepthStencil(QRhiRenderBuffer *ds)
void setFlags(QRhiSwapChain::Flags f)
void setFormat(QRhiSwapChain::Format f)
void setProxyData(const QRhiSwapChainProxyData &d)
void setRenderPassDescriptor(QRhiRenderPassDescriptor *desc)
void setSampleCount(int samples)
(since 6.9) void setShadingRateMap(QRhiShadingRateMap *map)
void setWindow(QWindow *window)
(since 6.9) QRhiShadingRateMap *shadingRateMap() const
virtual QSize surfacePixelSize() = 0
QWindow *window() const

Funciones Públicas Reimplementadas

virtual QRhiResource::Type resourceType() const override

Descripción Detallada

Una swapchain permite presentar resultados de renderizado a una superficie. Una swapchain está típicamente respaldada por un conjunto de buffers de color. De ellos, uno se muestra a la vez.

A continuación se muestra un patrón típico para la creación y gestión de una swapchain y algunos recursos asociados con el fin de renderizar en un QWindow:

void init()
{
    sc = rhi->newSwapChain();
    ds = rhi->newRenderBuffer(QRhiRenderBuffer::DepthStencil,
                              QSize(), // no need to set the size here due to UsedWithSwapChainOnly
                              1,
                              QRhiRenderBuffer::UsedWithSwapChainOnly);
    sc->setWindow(window);
    sc->setDepthStencil(ds);
    rp = sc->newCompatibleRenderPassDescriptor();
    sc->setRenderPassDescriptor(rp);
    resizeSwapChain();
}

void resizeSwapChain()
{
    hasSwapChain = sc->createOrResize();
}

void render()
{
    if (!hasSwapChain || notExposed)
        return;

    if (sc->currentPixelSize() != sc->surfacePixelSize() || newlyExposed) {
        resizeSwapChain();
        if (!hasSwapChain)
            return;
        newlyExposed = false;
    }

    rhi->beginFrame(sc);
    // ...
    rhi->endFrame(sc);
}

Evite depender de los eventos de redimensionamiento de QWindow para redimensionar las swapchains, sobre todo teniendo en cuenta que los tamaños de las superficies no siempre coinciden totalmente con las dimensiones indicadas en QWindow. El enfoque seguro y multiplataforma es realizar la comprobación a través de surfacePixelSize() cada vez que se inicie un nuevo fotograma.

La liberación de la swapchain debe producirse mientras QWindow y la ventana nativa subyacente están completamente en funcionamiento. A partir del ejemplo anterior:

void releaseSwapChain()
{
    if (hasSwapChain) {
        sc->destroy();
        hasSwapChain = false;
    }
}

// assuming Window is our QWindow subclass
bool Window::event(QEvent *e)
{
    switch (e->type()) {
    case QEvent::UpdateRequest: // for QWindow::requestUpdate()
        render();
        break;
    case QEvent::PlatformSurface:
        if (static_cast<QPlatformSurfaceEvent *>(e)->surfaceEventType() == QPlatformSurfaceEvent::SurfaceAboutToBeDestroyed)
            releaseSwapChain();
        break;
    default:
        break;
    }
    return QWindow::event(e);
}

Inicializar la swapchain y empezar a renderizar el primer fotograma no puede empezar en cualquier momento. El enfoque seguro y multiplataforma es confiar en los eventos expose. QExposeEvent es un evento vagamente especificado que se envía cada vez que una ventana se mapea, oscurece y redimensiona, dependiendo de la plataforma.

void Window::exposeEvent(QExposeEvent *)
{
    // initialize and start rendering when the window becomes usable for graphics purposes
    if (isExposed() && !running) {
        running = true;
        init();
    }

    // stop pushing frames when not exposed or size becomes 0
    if ((!isExposed() || (hasSwapChain && sc->surfacePixelSize().isEmpty())) && running)
        notExposed = true;

    // continue when exposed again and the surface has a valid size
    if (isExposed() && running && notExposed && !sc->surfacePixelSize().isEmpty()) {
        notExposed = false;
        newlyExposed = true;
    }

    if (isExposed() && !sc->surfacePixelSize().isEmpty())
        render();
}

Una vez iniciada la renderización, una forma sencilla de solicitar un nuevo fotograma es QWindow::requestUpdate(). Mientras que en algunas plataformas esto es simplemente un pequeño temporizador, en otras tiene una implementación específica: por ejemplo en macOS o iOS puede estar respaldado por CVDisplayLink. El ejemplo anterior ya está preparado para las peticiones de actualización mediante el manejo de QEvent::UpdateRequest.

Mientras actúa como QRhiRenderTarget, QRhiSwapChain también gestiona un QRhiCommandBuffer. Al llamar a QRhi::endFrame() se envían los comandos registrados y también se pone en cola una petición present. El comportamiento por defecto es hacer esto con un intervalo de intercambio de 1, lo que significa que la sincronización con el refresco vertical de la pantalla está activada. Así, el hilo de renderizado que llame a beginFrame() y endFrame() se acelerará a vsync. En algunos backends esto puede desactivarse pasando QRhiSwapChain:NoVSync en flags().

El multimuestreo (MSAA) se gestiona de forma transparente para las aplicaciones cuando se solicita a través de setSampleCount(). Cuando proceda, QRhiSwapChain se encargará de crear buffers de color adicionales y de emitir un comando de resolución de multimuestreo al final de un fotograma. Para OpenGL, es necesario solicitar el recuento de muestras apropiado también a través de QSurfaceFormat, llamando a QSurfaceFormat::setDefaultFormat() antes de inicializar QRhi.

Nota: Se trata de una API RHI con garantías de compatibilidad limitadas; consulte QRhi para obtener más información.

Documentación de tipos de miembros

enum QRhiSwapChain::Flag
flags QRhiSwapChain::Flags

Valores de bandera para describir las propiedades de la cadena de intercambio

ConstanteValorDescripción
QRhiSwapChain::SurfaceHasPreMulAlpha1 << 0Indica que la superficie de destino tiene transparencia con alfa premultiplicado. Por ejemplo, esto es lo que utiliza Qt Quick cuando el canal alfa está activado en el objetivo QWindow, porque el renderizador de scenegraph siempre genera fragmentos con alfa multiplicado en los valores rojo, verde y azul. Para garantizar un comportamiento idéntico en todas las plataformas, establezca siempre QSurfaceFormat::alphaBufferSize() en un valor distinto de cero en el destino QWindow siempre que se establezca este indicador en la cadena de intercambio.
QRhiSwapChain::SurfaceHasNonPreMulAlpha1 << 1Indica que la superficie de destino tiene transparencia con alfa no premultiplicado. Tenga en cuenta que esto puede no ser compatible en algunos sistemas, si el compositor del sistema siempre espera contenido con alfa premultiplicado. En ese caso, se espera que el comportamiento con esta bandera activada sea equivalente a SurfaceHasPreMulAlpha.
QRhiSwapChain::sRGB1 << 2Pide que se elija un formato sRGB para las memorias intermedias de color de la cadena de intercambio y/o las vistas de destino de renderizado, cuando proceda. Tenga en cuenta que esto implica que la actualización y mezcla del framebuffer sRGB se habilitará para todo el contenido dirigido a esta swapchain, y no es posible optar por no hacerlo. Para OpenGL, defina además sRGBColorSpace en QSurfaceFormat de QWindow. Aplicable sólo cuando el formato de la cadena de intercambio es QRhiSwapChain::SDR.
QRhiSwapChain::UsedAsTransferSource1 << 3Indica que la swapchain se utilizará como fuente de una readback en QRhiResourceUpdateBatch::readBackTexture().
QRhiSwapChain::NoVSync1 << 4Solicita deshabilitar la espera de sincronización vertical, evitando también la ralentización del hilo de renderizado. El comportamiento es específico del backend y aplicable sólo donde es posible controlar esto. Algunos pueden ignorar la solicitud por completo. Para OpenGL, intente en su lugar establecer el intervalo de intercambio en 0 en QWindow a través de QSurfaceFormat::setSwapInterval().
QRhiSwapChain::MinimalBufferCount1 << 5Solicita crear la swapchain con el número mínimo de buffers, que en la práctica es 2, a menos que la implementación gráfica tenga un número mínimo mayor que ese. Sólo aplicable con backends en los que dicho control está disponible a través de la API gráfica, por ejemplo, Vulkan. Por defecto es el backend el que decide el número de buffers que solicita (en la práctica casi siempre es 2 o 3), y no es asunto de las aplicaciones. Sin embargo, en Vulkan, por ejemplo, es probable que el backend prefiera el número más alto (3), por ejemplo para evitar problemas de rendimiento con algunas implementaciones de Vulkan en dispositivos móviles. Puede que en algunas plataformas resulte beneficioso forzar el número de búferes más bajo (2), por lo que esta bandera permite forzarlo. Tenga en cuenta que todo esto no tiene ningún efecto sobre el número de fotogramas que se mantienen en vuelo, por lo que la CPU (QRhi) seguirá preparando fotogramas como máximo N - 1 fotogramas por delante de la GPU, incluso cuando el recuento de búferes de imagen swapchain sea superior a N. (N = QRhi::FramesInFlight y típicamente 2).

El tipo Flags es un typedef para QFlags<Flag>. Almacena una combinación OR de valores Flag.

enum QRhiSwapChain::Format

Describe el formato de la cadena de intercambio. El formato por defecto es SDR.

Este enum se utiliza con isFormatSupported() para comprobar por adelantado si la creación de la swapchain con el formato dado está soportada por la plataforma y la pantalla asociada a la ventana, y con setFormat() para establecer el formato solicitado en la swapchain antes de llamar a createOrResize() por primera vez.

ConstanteValorDescripción
QRhiSwapChain::SDR0RGBA o BGRA de 8 bits, según el backend y la plataforma. Con OpenGL ES en particular, puede ocurrir que la plataforma proporcione menos de 8 bits (por ejemplo, debido a que EGL y el QSurfaceFormat elijan un formato 565 o 444 - esto está fuera del control de QRhi). Rango dinámico estándar. Puede combinarse con la opción QRhiSwapChain::sRGB.
QRhiSwapChain::HDRExtendedSrgbLinear1RGBA flotante de 16 bits, alto rango dinámico, espacio de color sRGB lineal extendido (scRGB). Esto implica primarios Rec. 709 (igual que SDR/sRGB) y colores lineales. La conversión al espacio de color nativo de la pantalla (como HDR10) la realiza el sistema de ventanas. En Windows este es el espacio de color canónico del compositor del sistema, y es el formato recomendado para las cadenas de intercambio HDR en general en plataformas de escritorio.
QRhiSwapChain::HDR10210-bit unsigned int RGB o BGR con 2 bit alpha, alto rango dinámico, espacio de color HDR10 (Rec. 2020) con una función de transferencia ST2084 PQ.
QRhiSwapChain::HDRExtendedDisplayP3Linear316-bit float RGBA, alto rango dinámico, espacio de color Display P3 lineal extendido. La opción principal para HDR en plataformas como iOS y VisionOS.

enum QRhiSwapChain::StereoTargetBuffer

Selecciona el backbuffer a utilizar con una cadena de intercambio estereoscópica.

ConstanteValor
QRhiSwapChain::LeftBuffer0
QRhiSwapChain::RightBuffer1

Documentación de la función miembro

[pure virtual] bool QRhiSwapChain::createOrResize()

Crea la cadena de intercambio si aún no se ha hecho y redimensiona los búferes de la cadena de intercambio para que coincidan con el tamaño actual de la superficie objetivo. Llama a esto siempre que el tamaño de la superficie objetivo sea diferente al anterior.

Nota: llame a destroy() sólo cuando la swapchain necesite ser liberada completamente, típicamente en QPlatformSurfaceEvent::SurfaceAboutToBeDestroyed. Para cambiar el tamaño, basta con llamar a createOrResize().

Devuelve true cuando tiene éxito, false cuando falla una operación gráfica. Independientemente del valor de retorno, llamar a destroy() es siempre seguro.

[pure virtual] QRhiCommandBuffer *QRhiSwapChain::currentFrameCommandBuffer()

Devuelve un buffer de comandos en el que se pueden grabar comandos de renderizado y actualizaciones de recursos dentro de un bloque beginFrame - endFrame, asumiendo que beginFrame() fue llamado con este swapchain.

Nota: El objeto devuelto es válido también después de endFrame(), hasta el siguiente beginFrame(), pero el buffer de comandos devuelto no debe utilizarse para registrar ningún comando entonces. Más bien, se puede utilizar para consultar los datos recogidos durante el frame (o frames anteriores), por ejemplo llamando a lastCompletedGpuTime().

Nota: El valor no debe almacenarse en caché y reutilizarse entre fotogramas. La persona que llama no debe retener el objeto devuelto una vez que se vuelva a llamar a beginFrame(). En su lugar, el objeto buffer de comandos debe ser consultado de nuevo llamando a esta función.

[pure virtual] QRhiRenderTarget *QRhiSwapChain::currentFrameRenderTarget()

Devuelve un objetivo de renderizado que puede utilizarse con beginPass() para renderizar el backbuffer actual de la cadena de intercambio. Sólo válido dentro de un bloque QRhi::beginFrame() - QRhi::endFrame() donde beginFrame() fue llamado con esta swapchain.

Nota: el valor no debe almacenarse en caché y reutilizarse entre fotogramas.

[virtual] QRhiRenderTarget *QRhiSwapChain::currentFrameRenderTarget(QRhiSwapChain::StereoTargetBuffer targetBuffer)

Devuelve un objetivo de renderizado que puede utilizarse con beginPass() para renderizar en la memoria intermedia izquierda o derecha de la cadena de intercambio. Esta sobrecarga sólo debe utilizarse con renderizado estereoscópico, es decir, cuando el QWindow asociado está respaldado por dos buffers de color, uno para cada ojo, en lugar de uno solo.

Cuando el renderizado estereoscópico no está soportado, el valor devuelto será el objetivo por defecto. Es soportado por todos los backends de hardware excepto Metal, en combinación con QSurfaceFormat::StereoBuffers, asumiendo que es soportado por la pila de controladores gráficos y de pantalla en tiempo de ejecución. Los backends Metal y Null devolverán el objetivo de renderizado por defecto desde esta sobrecarga.

Nota: el valor no debe ser cacheado y reutilizado entre frames.

QSize QRhiSwapChain::currentPixelSize() const

Devuelve el tamaño con el que la swapchain fue construida con éxito por última vez. Use esto para decidir si createOrResize() necesita ser llamado de nuevo: si currentPixelSize() != surfacePixelSize() entonces la swapchain necesita ser redimensionada.

Nota: La lógica típica de renderizado llamará a esta función para obtener el tamaño de salida cuando comience a preparar un nuevo fotograma, y basará los cálculos dependientes (como, la ventana gráfica) en el tamaño devuelto por esta función.

Aunque en muchos casos el valor es el mismo que QWindow::size() * QWindow::devicePixelRatio(), confiar en el tamaño devuelto por QWindow no garantiza que sea correcto en todas las plataformas e implementaciones de la API gráfica. Por lo tanto, se recomienda encarecidamente utilizar esta función siempre que sea necesario identificar las dimensiones, en píxeles, de la capa o superficie de salida.

Esto también tiene la ventaja añadida de evitar posibles carreras de datos cuando QRhi se utiliza en un hilo de renderizado dedicado, ya que se evita la necesidad de llamar a funciones QWindow, que pueden acceder a datos actualizados en el hilo principal.

Véase también surfacePixelSize().

QRhiRenderBuffer *QRhiSwapChain::depthStencil() const

Devuelve el renderbuffer actualmente asociado para el depth-stencil.

Véase también setDepthStencil().

QRhiSwapChain::Flags QRhiSwapChain::flags() const

Devuelve las banderas configuradas actualmente.

Véase también setFlags().

QRhiSwapChain::Format QRhiSwapChain::format() const

Devuelve el formato configurado actualmente.

Véase también setFormat().

[virtual] QRhiSwapChainHdrInfo QRhiSwapChain::hdrInfo()

Devuelve la información HDR de la pantalla asociada.

No asuma que se trata de una operación barata. Dependiendo de la plataforma, esta función realiza varias consultas a la plataforma que pueden tener un impacto en el rendimiento.

Nota: Se puede llamar antes de createOrResize() siempre que la ventana sea set.

Nota: Lo que ocurre al mover una ventana con una cadena de intercambio inicializada entre pantallas (HDR a HDR con características diferentes, HDR a SDR, etc.) no está bien definido actualmente y depende en gran medida del sistema de ventanas y del compositor, con un comportamiento potencialmente variable entre plataformas. Actualmente QRhi sólo garantiza que hdrInfo() devuelve datos válidos, si están disponibles, para la pantalla a la que pertenecía la ventana asociada a la swapchain en el momento de createOrResize().

Véase también QRhiSwapChainHdrInfo.

[pure virtual] bool QRhiSwapChain::isFormatSupported(QRhiSwapChain::Format f)

Devuelve true si se admite el formato de cadena de intercambio f. SDR siempre es compatible.

Nota: Puede llamarse independientemente de createOrResize(), pero window() debe estar ya establecido. Una llamada sin la ventana establecida puede conducir a resultados inesperados dependiendo del backend y de la plataforma (muy probablemente falso para cualquier formato HDR), porque el soporte del formato HDR suele estar ligado a la salida (pantalla) a la que pertenece la ventana asociada a la swapchain en un momento dado. Si el resultado es verdadero para un formato HDR, entonces se espera que la creación de la swapchain con ese formato tenga éxito siempre y cuando la ventana no se mueva a otra pantalla mientras tanto.

El uso principal de esta función es llamarla antes del primer createOrResize() después de que la ventana ya esté configurada. Esto permite a los backends de QRhi realizar consultas específicas a la plataforma o al sistema de ventanas para determinar si la ventana (y la pantalla en la que se encuentra) es capaz de emitir HDR real con el formato especificado.

Cuando el formato es reportado como soportado, se llama a setFormat() para establecer el formato solicitado y se llama a createOrResize(). Sin embargo, ten en cuenta las consecuencias: solicitar con éxito un formato HDR implicará tener que lidiar con un espacio de color diferente, posiblemente haciendo corrección de nivel de blanco para contenido no compatible con HDR, ajustando métodos de mapeado tonal, ajustando la configuración de destino de renderizado fuera de pantalla, etc.

Véase también setFormat().

[pure virtual] QRhiRenderPassDescriptor *QRhiSwapChain::newCompatibleRenderPassDescriptor()

Devuelve un nuevo QRhiRenderPassDescriptor que es compatible con esta swapchain.

El valor devuelto se utiliza de dos maneras: se puede pasar a setRenderPassDescriptor() y QRhiGraphicsPipeline::setRenderPassDescriptor(). Un descriptor de pase de renderizado describe los archivos adjuntos (color, profundidad/esténcil) y el comportamiento de carga/almacenamiento que pueden verse afectados por flags(). Un QRhiGraphicsPipeline sólo puede utilizarse en combinación con un swapchain que tenga establecido un compatible QRhiRenderPassDescriptor .

Véase también createOrResize().

QRhiSwapChainProxyData QRhiSwapChain::proxyData() const

Devuelve los datos proxy configurados actualmente.

Véase también setProxyData().

QRhiRenderPassDescriptor *QRhiSwapChain::renderPassDescriptor() const

Devuelve el objeto QRhiRenderPassDescriptor asociado actualmente.

Véase también setRenderPassDescriptor().

[override virtual] QRhiResource::Type QRhiSwapChain::resourceType() const

Reimplementa: QRhiResource::resourceType() const.

Devuelve el tipo de recurso.

int QRhiSwapChain::sampleCount() const

Devuelve el número de muestras actual. 1 significa que no hay antialiasing multimuestra.

Véase también setSampleCount().

void QRhiSwapChain::setDepthStencil(QRhiRenderBuffer *ds)

Establece el búfer de render ds para su uso como búfer de profundidad.

Véase también depthStencil().

void QRhiSwapChain::setFlags(QRhiSwapChain::Flags f)

Establece las banderas f.

Véase también flags().

void QRhiSwapChain::setFormat(QRhiSwapChain::Format f)

Establece el formato f.

Evita configurar formatos que isFormatSupported() indique que no son compatibles. Tenga en cuenta que la compatibilidad con un formato determinado puede depender de la pantalla en la que se abra la ventana asociada a la cadena intercambiable. En algunas plataformas, como Windows y macOS, para que la salida HDR funcione es necesario tener activada la salida HDR en la configuración de pantalla.

Consulte isFormatSupported(), QRhiSwapChainHdrInfo, y Format para obtener más información sobre la salida de alto rango dinámico.

Véase también format().

void QRhiSwapChain::setProxyData(const QRhiSwapChainProxyData &d)

Establece los datos proxy d.

Véase también proxyData() y QRhi::updateSwapChainProxyData().

void QRhiSwapChain::setRenderPassDescriptor(QRhiRenderPassDescriptor *desc)

Asociado a QRhiRenderPassDescriptor desc .

Véase también renderPassDescriptor().

void QRhiSwapChain::setSampleCount(int samples)

Establece el recuento de muestras. Los valores habituales para samples son 1 (sin MSAA), 4 (4x MSAA) u 8 (8x MSAA).

Véase también sampleCount() y QRhi::supportedSampleCounts().

[since 6.9] void QRhiSwapChain::setShadingRateMap(QRhiShadingRateMap *map)

Se asocia con el QRhiShadingRateMap especificado map. Esto es funcional sólo cuando la característica QRhi::VariableRateShadingMap es reportada como soportada.

Cuando también se llama a QRhiCommandBuffer::setShadingRate(), se utiliza la mayor de las dos tasas de sombreado para cada mosaico. Actualmente no se ofrece ningún control sobre el comportamiento del combinador.

Nota: Establecer un mapa de sombreado implica que se necesita un nuevo y diferente QRhiRenderPassDescriptor y algunos de los objetos swapchain nativos deben ser reconstruidos. Por lo tanto, si el swapchain ya está configurado, llame a newCompatibleRenderPassDescriptor() y setRenderPassDescriptor() justo después de setShadingRateMap(). Entonces, createOrResize() también debe ser llamada de nuevo. Esto tiene consecuencias de rodadura, por ejemplo para las tuberías de gráficos: esos también necesitan ser asociados con el nuevo QRhiRenderPassDescriptor y luego reconstruidos. Ver QRhiRenderPassDescriptor::serializedFormat() para algunas sugerencias sobre cómo manejar esto. Recuerde establecer la bandera QRhiGraphicsPipeline::UsesShadingRate para ellos también.

Esta función se introdujo en Qt 6.9.

Véase también shadingRateMap().

void QRhiSwapChain::setWindow(QWindow *window)

Establece la dirección window.

Véase también window().

[since 6.9] QRhiShadingRateMap *QRhiSwapChain::shadingRateMap() const

Devuelve el valor actual de QRhiShadingRateMap. Por defecto es nullptr.

Esta función se introdujo en Qt 6.9.

Véase también setShadingRateMap().

[pure virtual] QSize QRhiSwapChain::surfacePixelSize()

Devuelve El tamaño de la superficie o capa asociada a la ventana.

Atención: No asuma que esto es lo mismo que QWindow::size() * QWindow::devicePixelRatio(). Con algunas APIs gráficas e interfaces de sistemas de ventanas (por ejemplo, Vulkan) existe la posibilidad teórica de que una superficie asuma un tamaño diferente al de la ventana asociada. Para soportar estos casos, la lógica de renderizado debe basar siempre los cálculos derivados del tamaño (como, por ejemplo, los viewports) en el tamaño informado desde QRhiSwapChain, y nunca en el tamaño consultado desde QWindow.

Nota: También puede invocarse antes de createOrResize(), si al menos window() ya está activado. Esto en combinación con currentPixelSize() permite detectar cuando una swapchain necesita ser redimensionada. Sin embargo, tenga cuidado con el hecho de que el tamaño del objeto nativo subyacente (superficie, capa o similar) es "vivo", por lo que cada vez que se llama a esta función, devuelve el último valor informado por la implementación subyacente, sin ninguna garantía de atomicidad. Por lo tanto, se desaconseja utilizar esta función para determinar el tamaño de los píxeles de los recursos gráficos que se utilizan en un fotograma. En su lugar, utilice currentPixelSize(), que devuelve un tamaño atómico y no cambiará entre invocaciones a createOrResize().

Nota: Para las memorias intermedias de profundidad-esténcil utilizadas en combinación con las memorias intermedias de color de la cadena de intercambio, se recomienda encarecidamente confiar en el dimensionamiento automático y el comportamiento de reconstrucción proporcionado por la bandera QRhiRenderBuffer:UsedWithSwapChainOnly. Evite consultar el tamaño de la superficie a través de esta función sólo para obtener un tamaño que pueda pasarse a QRhiRenderBuffer::setPixelSize(), ya que sufriría de la falta de atomicidad descrita anteriormente.

Véase también currentPixelSize().

QWindow *QRhiSwapChain::window() const

Devuelve la ventana configurada actualmente.

Véase también setWindow().

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