QRhiGles2InitParams Struct
OpenGL 专用初始化参数。更多
Header: | #include <rhi/qrhi.h> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) 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 。此外,虽然可有可无,但建议同时传入第一个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 上下文要求(一个上下文只能在一个线程上处于当前状态)。隐式创建的上下文会与QRhi 一起自动销毁。
上下文的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 ,后者将由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 实例。这可以通过向QRhi::create() 传递指向QRhiGles2NativeHandles 的指针来实现。此时,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/main 线程上调用。
注: 一旦相关的QRhi 被销毁,应用程序有责任在 gui/main 线程上销毁返回的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
© 2025 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.