QRhiGles2InitParams 结构体

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

头文件 #include <QRhiGles2InitParams>
CMakefind_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmakeQT += gui
Qt 6.6
继承 QRhiInitParams

公共函数

公共变量

QSurface *fallbackSurface
QSurfaceFormatformat
QOpenGLContext *shareContext
QWindow *window

静态公共成员

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

详细描述

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

基于 OpenGL 的 QRhi 需要一个已创建的、可以与 QOpenGLContext 结合使用的 QSurface。在实践中,这通常是一个 QOffscreenSurface。此外,虽然可选,但建议同时传入第一个 QRhiSwapChain 将要针对的 QWindow

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

默认情况下,QRhi 会自行创建一个 QOpenGLContext。这种方法在大多数情况下都很好,包括线程化场景,其中每个渲染线程都有一个专门的 QRhi。由于每个 QRhi 都有一个 QOpenGLContext,因此满足 OpenGL 上下文要求(一个上下文只能在一个线程中当前)。

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

注意: 当渲染器依赖于深度或模板测试时,请记住将深度和模板缓冲区大小设置为24和8。无论是在全局默认的 QSurfaceFormat 中,还是在所有涉及的 QSurfaceFormat 实例中(例如在 format 中,传递给 newFallbackSurface() 的格式参数,以及在所有用于 QRhiQWindow 上):

必须指定一个 QSurfacefallbackSurface 中。为了避免在多线程情况下的错误,QRhi 从不会自动创建它,因为,像 QWindow 一样,QSurface 的子类实例通常只能在 gui/main 线程上创建。

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

注意: 在使用 OpenGL 后端的情况下,QRhiSwapChain 只能针对其表面类型设置为 QSurface::OpenGLSurfaceQSurface::RasterGLSurfaceQWindow 实例。

注意: 如果可能,建议指定 window。在多适配器和多屏幕系统上,这可以避免问题。如果没有设置 window,则第一个 QOpenGLContext::makeCurrent() 将与 fallbackSurface 发生,这可能是某些平台(例如,Windows)上的不可见窗口,并且可能在某些情况下触发意外的问题。

如果希望与他人现有的 QOpenGLContext 共享资源,则可以将 shareContext 设置为现有的 QOpenGLContext。或者,当启用时,也会考虑 Qt::AA_ShareOpenGLContexts

与现有 OpenGL 上下文一起工作

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

另一种方法是创建一个与另一个引擎的上下文QOpenGLContext QOpenGLContext QOpenGLContext QOpenGLContext 兼容的 QOpenGLContext,并通过 QRhiGles2NativeHandles 传递该上下文。

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

成员函数文档

QRhiGles2InitParams::QRhiGles2InitParams()

构建新的 QRhiGles2InitParams。

格式 被设置为 QSurfaceFormat::defaultFormat

[静态] QOffscreenSurface *QRhiGles2InitParams::newFallbackSurface(const QSurfaceFormat &格式 = QSurfaceFormat::defaultFormat())

返回一个新的 QOffscreenSurface,它可以与 QRhi 一起使用,通过将其传递到 QRhiGles2InitParams

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

将根据需要调整 格式,以避免由于不兼容的上下文和表面而在之后出现问题。

注意:此函数必须仅在 gui/main 线程上调用。

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

成员变量说明

QSurface *QRhiGles2InitParams::fallbackSurface

格式 兼容的 QSurface。通常是一个 QOffscreenSurface。提供此参数是强制性的。注意线程影响:像 QOffscreenSurfaceQWindow 一样,必须在主(gui)线程中创建和销毁 QOffscreenSurface,即使 QRhi 是在另一个线程上创建和操作的。

QSurfaceFormat QRhiGles2InitParams::format

QSurfaceFormat,默认初始化为 QSurfaceFormat::defaultFormat()。

QOpenGLContext *QRhiGles2InitParams::shareContext

可选的,与 QOpenGLContext 共享资源的上下文。QRhi 会创建自己的上下文,并将此成员设置为有效的 QOpenGLContext 将导致调用 setShareContext()。

QWindow *QRhiGles2InitParams::window

可选的,但针对带有 QRhiQWindow 时建议设置。

© 2024 Qt 公司。本文件中的文档贡献的版权归其所有者所有。本提供的文档是根据自由软件基金会发布的 GNU 自由文档许可证版本 1.3 许可的。Qt 及其相应的标志是芬兰的 Qt 公司和/或世界各地商标。所有其他商标均为其所有者的财产。