本页内容

QSGMaterialShader::RenderState Class

class QSGMaterialShader::RenderState

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

公共类型

enum DirtyState { DirtyMatrix, DirtyOpacity, DirtyCachedMaterialData, DirtyAll }
flags DirtyStates

公共函数

QMatrix4x4 combinedMatrix() const
float determinant() const
float devicePixelRatio() const
QRect deviceRect() const
QSGMaterialShader::RenderState::DirtyStates dirtyStates() const
bool isMatrixDirty() const
bool isOpacityDirty() const
QMatrix4x4 modelViewMatrix() const
float opacity() const
QMatrix4x4 projectionMatrix() const
QRhiResourceUpdateBatch *resourceUpdateBatch()
QRhi *rhi()
QByteArray *uniformData()
QRect viewportRect() const

详细说明

渲染状态包含许多访问器,着色器必须遵守这些访问器,才能符合场景图的当前状态。

成员类型文档

enum RenderState::DirtyState
flags RenderState::DirtyStates

常数值描述
QSGMaterialShader::RenderState::DirtyMatrix0x0001用于指示矩阵已发生变化,必须进行更新。
QSGMaterialShader::RenderState::DirtyOpacity0x0002用于指示不透明度已发生变化,必须进行更新。
QSGMaterialShader::RenderState::DirtyCachedMaterialData0x0004用于指示缓存的材质状态已发生变化,必须进行更新。
QSGMaterialShader::RenderState::DirtyAll0xFFFF用于指示所有内容都需要更新。

DirtyStates 类型是QFlags<DirtyState> 的 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()

返回指向着色器中统一(常量)缓冲区数据的指针。统一数据只能通过QSGMaterialShader::updateUniformData()进行更新。在其他可重写函数(例如QSGMaterialShader::updateSampledImage())中,返回值为null。

注意: 强烈建议 在着色器中使用std140 声明uniform块,并仔细研究OpenGL规范第7.6.2.2节中描述的标准uniform块布局。QSGMaterialShader 的实现需确保数据在QByteArray 中放置于正确位置,同时需考虑对齐要求。 转换为其他着色语言的着色器代码,应使用相同的块成员偏移量,即使目标语言默认采用不同的打包规则也是如此。

注意:应避免 从 C++ POD 类型(如结构体)中复制数据以一次性更新多个成员,除非已验证 C++ 结构体与 GLSL uniform 块的布局完全匹配。

QRect RenderState::viewportRect() const

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

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