En esta página

QRhiGles2InitParams Struct

Parámetros de inicialización específicos de OpenGL. 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: QRhiInitParams

Funciones Públicas

Variables Públicas

QSurface *fallbackSurface
QSurfaceFormat format
QOpenGLContext *shareContext
QWindow *window

Miembros públicos estáticos

QOffscreenSurface *newFallbackSurface(const QSurfaceFormat &format = QSurfaceFormat::defaultFormat())

Descripción detallada

Nota: Se trata de una API RHI con garantías de compatibilidad limitadas, véase QRhi para más detalles.

Un QRhi basado en OpenGL necesita un QSurface ya creado que pueda utilizarse en combinación con QOpenGLContext. En la práctica, lo más habitual es que se trate de QOffscreenSurface. Además, aunque es opcional, se recomienda pasar también el QWindow al que se dirigirá el primer QRhiSwapChain.

QOffscreenSurface *fallbackSurface = QRhiGles2InitParams::newFallbackSurface();
QRhiGles2InitParams params;
params.fallbackSurface = fallbackSurface;
params.window = window;
rhi = QRhi::create(QRhi::OpenGLES2, &params);

Por defecto, QRhi crea un QOpenGLContext por sí solo. Este enfoque funciona bien en la mayoría de los casos, incluidos los escenarios con subprocesos, donde hay un QRhi dedicado para cada subproceso de renderizado. Como habrá un QOpenGLContext para cada QRhi, se satisfacen los requisitos de contexto de OpenGL (un contexto sólo puede ser actual en un hilo). El contexto creado implícitamente se destruye automáticamente junto con QRhi.

El QSurfaceFormat para el contexto se especifica en format. El constructor lo establece en QSurfaceFormat::defaultFormat() para que las aplicaciones que llamen a QSurfaceFormat::setDefaultFormat() con la configuración adecuada antes de que se ejecute el constructor no necesiten cambiar el valor de format.

Nota: Recuerde establecer los tamaños de los búferes de profundidad y stencil a 24 y 8 cuando el renderizador dependa de pruebas de profundidad o stencil, ya sea en el valor global por defecto QSurfaceFormat, o, alternativamente, por separado en todas las instancias QSurfaceFormat implicadas: en format, el argumento de formato pasado a newFallbackSurface(), y en cualquier QWindow que se utilice con el QRhi.

Un QSurface tiene que ser especificado en fallbackSurface. Para prevenir errores en situaciones de hilos, este nunca es creado automáticamente por el QRhi porque, como QWindow, las instancias de QSurface subclases pueden a menudo ser creadas en el hilo gui/main solamente.

Por conveniencia, las aplicaciones pueden usar newFallbackSurface() que crea y devuelve un QOffscreenSurface que es compatible con el QOpenGLContext que va a ser creado por el QRhi después. Tenga en cuenta que la propiedad del QOffscreenSurface devuelto se transfiere a la persona que llama y el QRhi no lo destruirá.

Nota: Con el backend OpenGL, QRhiSwapChain sólo puede apuntar a instancias de QWindow que tengan su tipo de superficie establecido en QSurface::OpenGLSurface.

Nota: window es opcional. Se recomienda especificarlo siempre que sea posible, para evitar problemas en sistemas multiadaptador y multipantalla. Cuando window no está configurado, la primera QOpenGLContext::makeCurrent() ocurre con fallbackSurface que puede ser una ventana invisible en algunas plataformas (por ejemplo, Windows) y que puede desencadenar problemas inesperados en algunos casos.

En caso de que se desee compartir recursos con un QOpenGLContext existente, se puede establecer shareContext a un QOpenGLContext existente. Alternativamente, Qt::AA_ShareOpenGLContexts también es respetado, cuando está habilitado.

Trabajar con contextos OpenGL existentes

Al interoperar con otro motor gráfico, puede ser necesario obtener una instancia de QRhi que utilice el mismo contexto OpenGL. Esto se puede conseguir pasando un puntero a QRhiGles2NativeHandles a QRhi::create(). En este caso, QRhiGles2NativeHandles::context debe tener un valor no nulo.

Un enfoque alternativo es crear un QOpenGLContext que shares resources con el contexto del otro motor y pasar ese contexto a través de QRhiGles2NativeHandles.

El QRhi no se apropia del QOpenGLContext pasado a través de QRhiGles2NativeHandles.

Documentación de las funciones miembro

QRhiGles2InitParams::QRhiGles2InitParams()

Construye un nuevo QRhiGles2InitParams.

format se establece en QSurfaceFormat::defaultFormat().

[static] QOffscreenSurface *QRhiGles2InitParams::newFallbackSurface(const QSurfaceFormat &format = QSurfaceFormat::defaultFormat())

Devuelve un nuevo QOffscreenSurface que puede utilizarse con un QRhi pasándolo a través de un QRhiGles2InitParams.

Cuando no se especifica format, su valor por defecto es el formato global por defecto configurable a través de QSurfaceFormat::setDefaultFormat().

format se ajusta según convenga para evitar tener problemas después debido a un contexto y una superficie incompatibles.

Nota: Esta función sólo debe ser llamada en el hilo gui/main o si la integración de la plataforma soporta superficies fuera de pantalla.

Nota: Es responsabilidad de la aplicación destruir el QOffscreenSurface devuelto en el hilo gui/main una vez que se haya destruido el QRhi asociado. El QRhi no destruirá el QOffscreenSurface.

Documentación de variables miembro

QSurface *QRhiGles2InitParams::fallbackSurface

Un QSurface compatible con format. Normalmente un QOffscreenSurface. Siempre que esto sea obligatorio. Tenga en cuenta las implicaciones de los subprocesos: un QOffscreenSurface, como QWindow, sólo debe crearse y destruirse en el subproceso principal (gui), incluso si el QRhi se crea y opera en otro subproceso.

QSurfaceFormat QRhiGles2InitParams::format

El QSurfaceFormat, inicializado por defecto a QSurfaceFormat::defaultFormat().

QOpenGLContext *QRhiGles2InitParams::shareContext

Opcional, el QOpenGLContext con el que compartir recursos. QRhi crea su propio contexto, y establecer este miembro a un QOpenGLContext válido lleva a llamar a setShareContext() con él.

QWindow *QRhiGles2InitParams::window

Es opcional, pero se recomienda configurarlo cuando se dirija a QWindow con QRhi.

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