QRhiGles2InitParams 结构体
OpenGL 特定初始化参数。 更多...
头文件 | #include <QRhiGles2InitParams> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
qmake | QT += gui |
自 | Qt 6.6 |
继承 | QRhiInitParams |
公共函数
公共变量
QSurface * | fallbackSurface |
QSurfaceFormat | format |
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, ¶ms);
默认情况下,QRhi 会自行创建一个 QOpenGLContext。这种方法在大多数情况下都很好,包括线程化场景,其中每个渲染线程都有一个专门的 QRhi。由于每个 QRhi 都有一个 QOpenGLContext,因此满足 OpenGL 上下文要求(一个上下文只能在一个线程中当前)。
上下文的 QSurfaceFormat 在 format
中指定。构造函数将其设置为 QSurfaceFormat::defaultFormat(),因此在使用构造函数运行之前已使用适当的设置调用 QSurfaceFormat::setDefaultFormat() 的应用程序无需更改 format
的值。
注意: 当渲染器依赖于深度或模板测试时,请记住将深度和模板缓冲区大小设置为24和8。无论是在全局默认的 QSurfaceFormat 中,还是在所有涉及的 QSurfaceFormat 实例中(例如在 format
中,传递给 newFallbackSurface() 的格式参数,以及在所有用于 QRhi 的 QWindow 上):
必须指定一个 QSurface 在 fallbackSurface
中。为了避免在多线程情况下的错误,QRhi 从不会自动创建它,因为,像 QWindow 一样,QSurface 的子类实例通常只能在 gui/main 线程上创建。
作为一个便利,应用程序可以使用 newFallbackSurface(),该函数创建并返回一个与 QOpenGLContext 兼容的 QOffscreenSurface,该 QOpenGLContext 将由 QRhi 之后创建。请注意,返回的 QOffscreenSurface 的所有权转移给调用者,并且 QRhi 不会销毁它。
注意: 在使用 OpenGL 后端的情况下,QRhiSwapChain 只能针对其表面类型设置为 QSurface::OpenGLSurface 或 QSurface::RasterGLSurface 的 QWindow 实例。
注意: 如果可能,建议指定 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 线程上销毁返回的 QOffscreenSurface。 QRhi 不会销毁 QOffscreenSurface。
成员变量说明
QSurface *QRhiGles2InitParams::fallbackSurface
与 格式 兼容的 QSurface。通常是一个 QOffscreenSurface。提供此参数是强制性的。注意线程影响:像 QOffscreenSurface 和 QWindow 一样,必须在主(gui)线程中创建和销毁 QOffscreenSurface,即使 QRhi 是在另一个线程上创建和操作的。
QSurfaceFormat QRhiGles2InitParams::format
QSurfaceFormat,默认初始化为 QSurfaceFormat::defaultFormat()。
QOpenGLContext *QRhiGles2InitParams::shareContext
可选的,与 QOpenGLContext 共享资源的上下文。QRhi 会创建自己的上下文,并将此成员设置为有效的 QOpenGLContext 将导致调用 setShareContext()。
QWindow *QRhiGles2InitParams::window
© 2024 Qt 公司。本文件中的文档贡献的版权归其所有者所有。本提供的文档是根据自由软件基金会发布的 GNU 自由文档许可证版本 1.3 许可的。Qt 及其相应的标志是芬兰的 Qt 公司和/或世界各地商标。所有其他商标均为其所有者的财产。