QShaderProgram 类
class Qt3DRender::QShaderProgram封装了着色器程序。 更多...
| 头文件 | #include <QShaderProgram> | 
| CMake | find_package(Qt6 REQUIRED COMPONENTS 3drender) target_link_libraries(mytarget PRIVATE Qt6::3drender) | 
| qmake | QT += 3drender | 
| 由以下实例生成 | ShaderProgram | 
| 继承自 | Qt3DCore::QNode | 
公共类型
| enum | Format { GLSL, SPIRV } | 
| enum | ShaderType { Vertex, Fragment, TessellationControl, TessellationEvaluation, Geometry, Compute } | 
| enum | Status { NotReady, Ready, Error } | 
属性
| 
 | 
 | 
公共函数
| QByteArray | computeShaderCode() const | 
| Qt3DRender::QShaderProgram::Format | format() const | 
| QByteArray | fragmentShaderCode() const | 
| QByteArray | geometryShaderCode() const | 
| QString | log() const | 
| void | setFormat(Qt3DRender::QShaderProgram::Format format) | 
| void | setShaderCode(Qt3DRender::QShaderProgram::ShaderType type, const QByteArray &shaderCode) | 
| QByteArray | shaderCode(Qt3DRender::QShaderProgram::ShaderType type) const | 
| Qt3DRender::QShaderProgram::Status | status() const | 
| QByteArray | tessellationControlShaderCode() const | 
| QByteArray | tessellationEvaluationShaderCode() const | 
| QByteArray | vertexShaderCode() const | 
公共槽
| void | setComputeShaderCode(const QByteArray &computeShaderCode) | 
| void | setFragmentShaderCode(const QByteArray &fragmentShaderCode) | 
| void | setGeometryShaderCode(const QByteArray &geometryShaderCode) | 
| void | setTessellationControlShaderCode(const QByteArray &tessellationControlShaderCode) | 
| void | setTessellationEvaluationShaderCode(const QByteArray &tessellationEvaluationShaderCode) | 
| void | setVertexShaderCode(const QByteArray &vertexShaderCode) | 
信号
| void | computeShaderCodeChanged(const QByteArray &computeShaderCode) | 
| void | formatChanged(Qt3DRender::QShaderProgram::Format format) | 
| void | fragmentShaderCodeChanged(const QByteArray &fragmentShaderCode) | 
| void | geometryShaderCodeChanged(const QByteArray &geometryShaderCode) | 
| void | logChanged(const QString &log) | 
| void | statusChanged(Qt3DRender::QShaderProgram::Status status) | 
| void | tessellationControlShaderCodeChanged(const QByteArray &tessellationControlShaderCode) | 
| void | tessellationEvaluationShaderCodeChanged(const QByteArray &tessellationEvaluationShaderCode) | 
| void | vertexShaderCodeChanged(const QByteArray &vertexShaderCode) | 
静态公有成员
| QByteArray | loadSource(const QUrl &sourceUrl) | 
详细说明
着色程序由多个不同的着色器组成,例如顶点着色器和片段着色器。
在着色器探测阶段,Qt3D会自动填充一组默认的统一变量。
| 默认统一变量 | 关联的Qt3D参数名称 | GLSL声明 | 
|---|---|---|
| ModelMatrix | modelMatrix | uniform mat4 modelMatrix; | 
| ViewMatrix | viewMatrix | uniform mat4 viewMatrix; | 
| ProjectionMatrix | projectionMatrix | uniform mat4 projectionMatrix; | 
| ModelViewMatrix | modelView | uniform mat4 modelView; | 
| ViewProjectionMatrix | viewProjectionMatrix | uniform mat4 viewProjectionMatrix; | 
| ModelViewProjectionMatrix | modelViewProjection mvp | uniform mat4 modelViewProjection; uniform mat4 mvp; | 
| InverseModelMatrix | inverseModelMatrix | uniform mat4 inverseModelMatrix; | 
| InverseViewMatrix | inverseViewMatrix | uniform mat4 inverseViewMatrix; | 
| InverseProjectionMatrix | inverseProjectionMatrix | uniform mat4 inverseProjectionMatrix; | 
| InverseModelViewMatrix | inverseModelView | uniform mat4 inverseModelView; | 
| InverseViewProjectionMatrix | inverseViewProjectionMatrix | uniform mat4 inverseViewProjectionMatrix; | 
| InverseModelViewProjectionMatrix | inverseModelViewProjection | uniform mat4 inverseModelViewProjection; | 
| ModelNormalMatrix | modelNormalMatrix | uniform mat3 modelNormalMatrix; | 
| ModelViewNormalMatrix | modelViewNormal | uniform mat3 modelViewNormal; | 
| ViewportMatrix | viewportMatrix | uniform mat4 viewportMatrix; | 
| InverseViewportMatrix | inverseViewportMatrix | uniform mat4 inverseViewportMatrix; | 
| AspectRatio (surface width / surface height) | aspectRatio | uniform float aspectRatio; | 
| Exposure | exposure | uniform float exposure; | 
| Gamma | gamma | uniform float gamma; | 
| Time (in nano seconds) | time | uniform float time; | 
| EyePosition | eyePosition | uniform vec3 eyePosition; | 
| SkinningPalette | skinningPalette[0] | 定义常量int maxJoints = 100; uniform mat4 skinningPalette[maxJoints]; | 
RHI支持
当编写与Qt 3D的RHI后端一起使用的GLSL 450着色器代码时,默认的uniform将被提供为两个uniform缓冲区对象。
这些绑定的位置设置为0绑定到RenderView uniform和1绑定到Command uniform。
#version 450 core
layout(location = 0) in vec3 vertexPosition;
layout(std140, binding = 0) uniform qt3d_render_view_uniforms {
  mat4 viewMatrix;
  mat4 projectionMatrix;
  mat4 uncorrectedProjectionMatrix;
  mat4 clipCorrectionMatrix;
  mat4 viewProjectionMatrix;
  mat4 inverseViewMatrix;
  mat4 inverseProjectionMatrix;
  mat4 inverseViewProjectionMatrix;
  mat4 viewportMatrix;
  mat4 inverseViewportMatrix;
  vec4 textureTransformMatrix;
  vec3 eyePosition;
  float aspectRatio;
  float gamma;
  float exposure;
  float time;
  float yUpInNDC;
  float yUpInFBO;
};
layout(std140, binding = 1) uniform qt3d_command_uniforms {
  mat4 modelMatrix;
  mat4 inverseModelMatrix;
  mat4 modelViewMatrix;
  mat3 modelNormalMatrix;
  mat4 inverseModelViewMatrix;
  mat4 modelViewProjection;
  mat4 inverseModelViewProjectionMatrix;
};
void main()
{
    gl_Position = (projectionMatrix * viewMatrix * modelMatrix * vertexPosition);
}对于用户定义的均匀缓冲区对象,请使用从2开始的绑定或自动绑定,让Qt 3D自动确定绑定。请确保在不同着色器阶段之间保持一致性。
#version 450 core
layout(std140, binding = auto) uniform my_uniforms {
  vec4 myColor;
};
layout(location=0) out vec4 fragColor;
void main()
{
    fragColor = myColor;
}向uniform喂值时没有变化。
对于上面的示例,可以设置myColor如下
QParameter *parameter = new QParameter();
parameter->setName("myColor");
parameter->setValue(QVariant::fromValue(QColor(Qt::blue)));纹理仍然需要定义为独立uniform。
#version 450 core
layout(binding=0) uniform sampler2D source;
layout(location=0) out vec4 fragColor;
void main()
{
    fragColor = texture(source, vec2(0.5, 0.5));
}成员类型文档
enum QShaderProgram::格式
此枚举标识了使用的着色器代码的格式。
| 常量 | 值 | 描述 | 
|---|---|---|
| Qt3DRender::QShaderProgram::GLSL | 0 | OpenGL | 
| Qt3DRender::QShaderProgram::SPIRV | 1 | Vulkan, OpenGL 5 | 
enum QShaderProgram::着色器类型
此枚举标识了使用的着色器类型。
| 常量 | 值 | 描述 | 
|---|---|---|
| Qt3DRender::QShaderProgram::顶点 | 0 | 顶点着色器 | 
| Qt3DRender::QShaderProgram::片段 | 1 | 片段着色器 | 
| Qt3DRender::QShaderProgram::TessellationControl | 2 | 细分控制着色器 | 
| Qt3DRender::QShaderProgram::TessellationEvaluation | 3 | 细分评估着色器 | 
| Qt3DRender::QShaderProgram::Geometry | 4 | 几何着色器 | 
| Qt3DRender::QShaderProgram::Compute | 5 | 计算着色器 | 
enum QShaderProgram::状态
此枚举标识了使用的着色器的状态。
| 常量 | 值 | 描述 | 
|---|---|---|
| Qt3DRender::QShaderProgram::NotReady | 0 | 着色器尚未编译和链接 | 
| Qt3DRender::QShaderProgram::Ready | 1 | 着色器成功编译 | 
| Qt3DRender::QShaderProgram::Error | 2 | 在编译着色器时发生错误 | 
属性文档
computeShaderCode : QByteArray
保存此着色器程序使用的计算着色器代码。
访问函数
| QByteArray | computeShaderCode() const | 
| void | setComputeShaderCode(const QByteArray &computeShaderCode) | 
通知器信号
| void | computeShaderCodeChanged(const QByteArray &computeShaderCode) | 
format : 格式
保存提供给ShaderProgram的代码的格式。默认为ShaderProgram.GLSL
访问函数
| Qt3DRender::QShaderProgram::Format | format() const | 
| void | setFormat(Qt3DRender::QShaderProgram::Format format) | 
通知器信号
| void | formatChanged(Qt3DRender::QShaderProgram::Format format) | 
fragmentShaderCode : QByteArray
保存此着色器程序使用的片段着色器代码。
访问函数
| QByteArray | fragmentShaderCode() const | 
| void | setFragmentShaderCode(const QByteArray &fragmentShaderCode) | 
通知器信号
| void | fragmentShaderCodeChanged(const QByteArray &fragmentShaderCode) | 
geometryShaderCode : QByteArray
保存此着色器程序使用的几何着色器代码。
访问函数
| QByteArray | geometryShaderCode() const | 
| void | setGeometryShaderCode(const QByteArray &geometryShaderCode) | 
通知器信号
| void | geometryShaderCodeChanged(const QByteArray &geometryShaderCode) | 
[只读] 日志 : const QString
持有当前着色器程序的日志。这对于诊断着色器程序的编译失败很有用。
访问函数
| QString | log() const | 
通知器信号
| void | logChanged(const QString &日志) | 
[只读] 状态 : const Status
持有当前着色器程序的状态。
访问函数
| Qt3DRender::QShaderProgram::Status | 状态() const | 
通知器信号
| void | statusChanged(Qt3DRender::QShaderProgram::Status 状态) | 
tessellationControlShaderCode : QByteArray
持有由该着色器程序使用的细分控制着色器代码。
访问函数
| QByteArray | tessellationControlShaderCode() const | 
| void | setTessellationControlShaderCode(const QByteArray &细分控制着色器代码) | 
通知器信号
| void | tessellationControlShaderCodeChanged(const QByteArray &细分控制着色器代码) | 
tessellationEvaluationShaderCode : QByteArray
持有由该着色器程序使用的细分评估着色器代码。
访问函数
| QByteArray | tessellationEvaluationShaderCode() const | 
| void | setTessellationEvaluationShaderCode(const QByteArray &细分评估着色器代码) | 
通知器信号
| void | tessellationEvaluationShaderCodeChanged(const QByteArray &细分评估着色器代码) | 
vertexShaderCode : QByteArray
持有该着色器程序使用的顶点着色器代码。
访问函数
| QByteArray | vertexShaderCode() const | 
| void | setVertexShaderCode(const QByteArray &顶点着色器代码) | 
通知器信号
| void | vertexShaderCodeChanged(const QByteArray &顶点着色器代码) | 
成员函数文档
[静态可调用] QByteArray QShaderProgram::loadSource(const QUrl &sourceUrl)
从 sourceUrl 加载着色器代码。
注意:此函数可以通过元对象系统和从 QML 调用。参见 Q_INVOKABLE。
void QShaderProgram::setShaderCode(Qt3DRender::QShaderProgram::ShaderType 类型, const QByteArray &着色器代码)
将着色器代码设置为 类型 的着色器。
另请参见 着色器代码。
QByteArray QShaderProgram::shaderCode(Qt3DRender::QShaderProgram::ShaderType 类型) const
返回 类型 的着色器代码。
另请参见 setShaderCode。
Qt3DRender::QShaderProgram::Status QShaderProgram::status() const
返回当前着色器程序的状态。
注意:属性状态获取器函数。
© 2024 Qt公司有限公司。本文件中包含的文档贡献均为各自所有者的版权。本提供的文档根据自由软件基金会发布的GNU自由文档许可协议版本1.3许可条款发布。Qt及其相关标识为芬兰及世界其他地区的Qt公司有限公司的商标。所有其他商标均为各自所有者的财产。