渲染状态类
class QSGMaterialShader::RenderState封装了在调用QSGMaterialShader::updateUniformData()及其它类似 update 的函数时的当前渲染状态。更多...
公共类型
枚举 | DirtyState { DirtyMatrix, DirtyOpacity, DirtyCachedMaterialData, DirtyAll } |
标志 | 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 |
成员类型文档
枚举 RenderState::DirtyState
标志 RenderState::DirtyStates
常量 | 值 | 描述 |
---|---|---|
QSGMaterialShader::RenderState::DirtyMatrix | 0x0001 | 用来指示矩阵已经改变,需要更新。 |
QSGMaterialShader::RenderState::DirtyOpacity | 0x0002 | 用来指示透明度已经改变,需要更新。 |
QSGMaterialShader::RenderState::DirtyCachedMaterialData | 0x0004 | 用来指示缓存的材质状态已经改变,需要更新。 |
QSGMaterialShader::RenderState::DirtyAll | 0xFFFF | 用来指示所有内容都需要更新。 |
DirtyStates 类型是为 QFlags
成员函数文档
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 在芬兰和/或其他国家/地区的商标。所有其他商标均属于其各自所有者。