渲染状态类

class QSGMaterialShader::RenderState

封装了在调用QSGMaterialShader::updateUniformData()及其它类似 update 的函数时的当前渲染状态。更多...

公共类型

枚举DirtyState { DirtyMatrix, DirtyOpacity, DirtyCachedMaterialData, DirtyAll }
标志DirtyStates

公共函数

QMatrix4x4combinedMatrix() const
floatdeterminant() const
floatdevicePixelRatio() const
QRectdeviceRect() const
QSGMaterialShader::RenderState::DirtyStatesdirtyStates() const
boolisMatrixDirty() const
boolisOpacityDirty() const
QMatrix4x4modelViewMatrix() const
floatopacity() const
QMatrix4x4projectionMatrix() const
QRhiResourceUpdateBatch *resourceUpdateBatch()
QRhi *rhi()
QByteArray *uniformData()
QRectviewportRect() const

详细描述

渲染状态包括了一些着色器需要遵守的对场景图当前状态访问器。

成员类型文档

枚举 RenderState::DirtyState
标志 RenderState::DirtyStates

常量描述
QSGMaterialShader::RenderState::DirtyMatrix0x0001用来指示矩阵已经改变,需要更新。
QSGMaterialShader::RenderState::DirtyOpacity0x0002用来指示透明度已经改变,需要更新。
QSGMaterialShader::RenderState::DirtyCachedMaterialData0x0004用来指示缓存的材质状态已经改变,需要更新。
QSGMaterialShader::RenderState::DirtyAll0xFFFF用来指示所有内容都需要更新。

DirtyStates 类型是为 QFlags 的一个typedef。它存储了一个DirtyState值的按位或组合。

成员函数文档

QMatrix4x4 RenderState::combinedMatrix() const

返回模型视图矩阵和投影矩阵的组合矩阵。

float RenderState::determinant() const

返回用于渲染的模型视图行列式。

float RenderState::devicePixelRatio() const

返回用于渲染的物理像素与设备无关像素之间的比率。

QRect RenderState::deviceRect() const

返回正被渲染的表面的设备矩形。

QSGMaterialShader::RenderState::DirtyStates RenderState::dirtyStates() const

返回哪些渲染状态已更改并需要更新,以便使用此材料渲染的几何图形符合当前的渲染状态。

bool RenderState::isMatrixDirty() const

如果 dirtyStates() 包含肮脏的矩阵状态,则返回 true,否则返回 false

bool RenderState::isOpacityDirty() const

如果 dirtyStates() 包含肮脏的不透明度状态,则返回 true,否则返回 false

QMatrix4x4 RenderState::modelViewMatrix() const

返回模型视图矩阵。

如果材料设置了 RequiresFullMatrix 标志,则保证这是从场景图中计算出的完整变换矩阵。

但是,如果没有设置此标志,渲染器可以选择更改此矩阵。例如,它可能在 CPU 上预变换顶点并将此矩阵设置为恒等变换。

在上述情况下,仍然可以通过在材料中设置 RequiresDeterminant 标志并调用 determinant() 访问器来检索实际的矩阵行列式。

float RenderState::opacity() const

返回用于渲染的累积不透明度。

QMatrix4x4 RenderState::projectionMatrix() const

返回投影矩阵。

QRhiResourceUpdateBatch *RenderState::resourceUpdateBatch()

返回可以排队上传和复制操作的资源更新批处理。这通常用于 QSGMaterialShader::updateSampledImage() 以排队纹理图像内容更新。

QRhi *RenderState::rhi()

返回当前的 QRhi

QByteArray *RenderState::uniformData()

返回指向 shader 中统一缓冲区(常量缓冲区)数据的指针。统一数据必须只从 QSGMaterialShader::updateUniformData() 更新。在其他可重写的函数中返回值为 null,例如,在 QSGMaterialShader::updateSampledImage() 中。

注意: 强烈建议在着色器中用 std140 声明统一块,并仔细研究 OpenGL 规范中 7.6.2.2 节所描述的标准统一块布局。确保数据按对齐要求放置在 QByteArray 的正确位置,这是由 QSGMaterialShader 的实现来保证的。期望将着色器代码翻译为其他着色语言时,即使目标语言默认有不同的打包规则,块成员的偏移量也应保持相同。

注意: 要避免从 C++ POD 类型(如,结构体)进行复制以一次性更新多个成员,除非已经验证了 C++ 结构体和 GLSL 统一块的布局匹配。

QRect RenderState::viewportRect() const

返回要渲染的表面的视口矩形。

© 2024 The Qt Company Ltd. 组成此文档的贡献者的文档版权归其所有者所有。此文档是在自由软件基金会发布和适用的 GNU 自由文档许可证版本 1.3 条件下提供的。Qt 及相关标志是 The Qt Company Ltd 在芬兰和/或其他国家/地区的商标。所有其他商标均属于其各自所有者。