本页内容

QRhiGles2InitParams Struct

OpenGL 特定的初始化参数。更多内容...

头文件: #include <rhi/qrhi.h>
CMake: find_package(Qt6 REQUIRED COMPONENTS GuiPrivate)
target_link_libraries(mytarget PRIVATE Qt6::GuiPrivate)
qmake: QT += gui-private
自: Qt 6.6
继承自: QRhiInitParams

公共函数

公共变量

QSurface *fallbackSurface
QSurfaceFormat format
QOpenGLContext *shareContext
QWindow *window

静态公共成员

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

详细说明

注意:这是一个 兼容性保证有限的 RHI API,详情请参阅QRhi 。

基于 OpenGL 的QRhi 需要一个已创建的QSurface ,该对象可与QOpenGLContext 配合使用。实际上,最常见的情况是使用QOffscreenSurface 。此外,虽然不是必需的,但建议同时传入QWindow ,即第一个QRhiSwapChain 将要定位的目标。

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

默认情况下,QRhi 会自行创建一个QOpenGLContext 。这种方法在大多数情况下都能很好地工作,包括多线程场景——此时每个渲染线程都会有一个专用的QRhi 。由于每个QRhi 都会有一个对应的QOpenGLContext ,因此满足了 OpenGL 上下文的要求(一个上下文只能在单个线程上处于活动状态)。该隐式创建的上下文会随QRhi 一起被自动销毁。

该上下文的QSurfaceFormat 在format 中指定。构造函数将其设置为QSurfaceFormat::defaultFormat(),因此,在构造函数运行之前使用适当设置调用QSurfaceFormat::setDefaultFormat()的应用程序无需更改format 的值。

注意: 当渲染器依赖深度或模板测试时,请务必将 深度和模板缓冲区大小设置为 24 和 8,该设置可通过全局默认的QSurfaceFormat 进行配置,或者在所有相关的QSurfaceFormat 实例中分别设置:包括format 、传递给newFallbackSurface() 的 format 参数,以及与QRhi 配合使用的任何QWindow 。

必须在fallbackSurface 中指定一个QSurface 。为了防止在多线程环境中出现错误,QRhi 绝不会自动创建该对象,因为与QWindow 一样,QSurface 子类的实例通常只能在 GUI/主线程上创建。

为方便起见,应用程序可以使用newFallbackSurface(),该函数会创建并返回一个与QOffscreenSurface 兼容的 ,该 与随后由QRhi 创建的QOpenGLContext 兼容。请注意,返回的QOffscreenSurface 的所有权将转移给调用者,QRhi 不会销毁它。

注意:在 OpenGL 后端中,QRhiSwapChain 只能针对将表面类型设置为QSurface::OpenGLSurface 的QWindow 实例。

注意: window 是可选的。建议在可能的情况下始终指定该参数,以避免在多适配器和多屏幕系统中出现问题。当未设置window 时,首次调用QOpenGLContext::makeCurrent()时会使用fallbackSurface ,在某些平台(例如Windows)上,这可能是一个不可见的窗口,并在某些情况下可能引发意外问题。

如果希望与现有的QOpenGLContext 共享资源,可以将shareContext 设置为现有的QOpenGLContext 。此外,当启用时,Qt::AA_ShareOpenGLContexts 也会被接受。

与现有 OpenGL 上下文协作

在与另一个图形引擎进行互操作时,可能需要获取一个使用相同 OpenGL 上下文的QRhi 实例。这可以通过将QRhiGles2NativeHandles 的指针传递给QRhi::create() 来实现。此时,QRhiGles2NativeHandles::context 必须设置为非空值。

另一种方法是创建一个QOpenGLContext ,使其通过shares resources 与另一个引擎的上下文建立关联,并通过QRhiGles2NativeHandles 传递该上下文。

该QRhi 不会获取通过QRhiGles2NativeHandles 传递的QOpenGLContext 的所有权。

成员函数文档

QRhiGles2InitParams::QRhiGles2InitParams()

创建一个新的 QRhiGles2InitParams 对象。

format 被设置为QSurfaceFormat::defaultFormat()。

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

返回一个新的QOffscreenSurface ,可以通过QRhiGles2InitParams 将其传递给QRhi 以供使用。

当未指定format 时,其默认值是通过QSurfaceFormat::setDefaultFormat()设置的全局默认格式。

format 会进行适当调整,以避免因上下文和绘制区域不兼容而在后续操作中出现问题。

注意:此 函数仅可在 GUI/主线程上调用,或者在平台集成支持离屏表面时调用。

注意: 一旦关联的QRhi 被销毁,应用程序有 责任在gui/主线程上销毁返回的QOffscreenSurface 。QRhi 不会销毁QOffscreenSurface 。

成员变量文档

QSurface *QRhiGles2InitParams::fallbackSurface

一个与 `format` 兼容的 `QSurface `。通常为 `QOffscreenSurface`。必须提供该对象。请注意线程相关的影响:`QOffscreenSurface`(例如 `QWindow`)必须仅在主(GUI)线程上进行创建和销毁,即使 `QRhi ` 是在另一个线程上创建并运行的。

QSurfaceFormat QRhiGles2InitParams::format

QSurfaceFormat ,默认通过QSurfaceFormat::defaultFormat()进行初始化。

QOpenGLContext *QRhiGles2InitParams::shareContext

可选参数,用于共享资源的QOpenGLContext 。QRhi 会创建自己的上下文,若将此成员设置为有效的QOpenGLContext ,则会使用该上下文调用setShareContext()。

QWindow *QRhiGles2InitParams::window

此项为可选,但在使用QRhi 将目标定位为QWindow 时,建议进行设置。

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