QShaderDescription 类
描述着色器接口。 更多...
| 头文件 | #include <QShaderDescription> |
| CMake | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake | QT += gui |
| 自 | Qt 6.6 |
- 全部成员列表,包括继承的成员
- QShaderDescription 属于 3D 渲染。
公共类型
(since 6.6) struct | BlockVariable |
(since 6.6) struct | BuiltinVariable |
(since 6.6) struct | InOutVariable |
(since 6.6) struct | PushConstantBlock |
(since 6.6) struct | StorageBlock |
(since 6.6) struct | UniformBlock |
| enum | BuiltinType { PositionBuiltin, PointSizeBuiltin, ClipDistanceBuiltin, CullDistanceBuiltin, VertexIdBuiltin, …, InstanceIndexBuiltin } |
| enum | ImageFlag { ReadOnlyImage, WriteOnlyImage } |
| flags | ImageFlags |
| enum | ImageFormat { ImageFormatUnknown, ImageFormatRgba32f, ImageFormatRgba16f, ImageFormatR32f, ImageFormatRgba8, …, ImageFormatR8ui } |
| enum | QualifierFlag { QualifierReadOnly, QualifierWriteOnly, QualifierCoherent, QualifierVolatile, QualifierRestrict } |
| flags | QualifierFlags |
| enum | TessellationMode { UnknownTessellationMode, TrianglesTessellationMode, QuadTessellationMode, IsolineTessellationMode } |
| enum | TessellationPartitioning { UnknownTessellationPartitioning, EqualTessellationPartitioning, FractionalEvenTessellationPartitioning, FractionalOddTessellationPartitioning } |
| enum | TessellationWindingOrder { UnknownTessellationWindingOrder, CwTessellationWindingOrder, CcwTessellationWindingOrder } |
| enum | VariableType { Unknown, Float, Vec2, Vec3, Vec4, …, Half4 } |
公共函数
| QShaderDescription() | |
| QShaderDescription(const QShaderDescription &other) | |
| ~QShaderDescription() | |
| QList<QShaderDescription::InOutVariable> | combinedImageSamplers() const |
| std::array<uint, 3> | computeShaderLocalSize() const |
| QList<QShaderDescription::BuiltinVariable> | inputBuiltinVariables() const |
| QList<QShaderDescription::InOutVariable> | inputVariables() const |
| bool | isValid() const |
| QList<QShaderDescription::BuiltinVariable> | outputBuiltinVariables() const |
| QList<QShaderDescription::InOutVariable> | outputVariables() const |
| QList<QShaderDescription::PushConstantBlock> | pushConstantBlocks() const |
| void | serialize(QDataStream *stream, int version) const |
| QList<QShaderDescription::StorageBlock> | storageBlocks() const |
| QList<QShaderDescription::InOutVariable> | storageImages() const |
| QShaderDescription::TessellationMode | tessellationMode() const |
| uint | tessellationOutputVertexCount() const |
| QShaderDescription::TessellationPartitioning | tessellationPartitioning() const |
| QShaderDescription::TessellationWindingOrder | tessellationWindingOrder() const |
| QByteArray | toJson() const |
| QList<QShaderDescription::UniformBlock> | uniformBlocks() const |
| QShaderDescription & | operator=(const QShaderDescription &other) |
静态公共成员
| QShaderDescription | deserialize(QDataStream *stream, int version) |
相关非成员
| bool | operator==(const QShaderDescription &lhs, const QShaderDescription &rhs) |
详细信息
注意:Qt Gui模块中的QRhi类家族(包括QShader和QShaderDescription),提供有限的兼容性保证。对于这些类没有任何源代码或二进制兼容性保证,这意味着API仅保证与开发应用时使用的Qt版本兼容。源代码不兼容的变更目标是尽可能保持最小,并且仅在次版本中(6.7、6.8等)进行修改。为了在应用中使用这些类,链接到Qt::GuiPrivate(如果使用CMake),并包含以rhi前缀的头部,例如,#include <rhi/qshaderdescription.h>.
着色器通常有一组输入和输出。例如,顶点着色器有多种输入变量,并可能使用一个或多个统一缓冲区来访问由应用提供的数据(例如模型视图矩阵)。片阶段着色器从顶点阶段接收数据(在简单设置中)并且也可能依赖于统一缓冲区、图像和采样器中的数据。
当涉及到顶点输入和统一缓冲区的布局(成员的名字是什么?大小、偏移等)时,应用和框架可能需要在运行时动态地发现这些信息。当着色器不是内置的,而是由外部实体(如用户)提供时,这种情况很常见。
现代和精简的图形API可能不再提供在运行时查询着色器反射信息的方法。因此,此类数据现在由QShaderBaker自动生成,并作为每个QShader的QShaderDescription对象提供。
示例
以下是一个顶点着色器的例子
#version 440
layout(location = 0) in vec4 position;
layout(location = 1) in vec3 color;
layout(location = 0) out vec3 v_color;
layout(std140, binding = 0) uniform buf {
mat4 mvp;
float opacity;
} ubuf;
void main()
{
v_color = color;
gl_Position = ubuf.mvp * position;
}这个着色器有两个输入:position位于位置0,数据类型为vec4,以及位于位置1的color,数据类型为vec3。它有一个输出:v_color,尽管这对于应用来说通常并不重要。更重要的是,绑定0中有一个大小为68字节的统一缓冲区,其中包含两个成员,一个偏移量为0的4x4矩阵mvp和一个偏移量为64的浮点数opacity。
所有这些都可以由一个QShaderDescription对象来描述。QShaderDescription可以通过QDataStream序列化为JSON格式和二进制格式,也可以从这种二进制格式反序列化出来。在实际情况中,这很少需要,因为QShader会自动处理关联的QShaderDescription,但如果上述着色器的QShaderDescription被写入为JSON格式(比如通过qsb工具的-d选项),它将如下所示
{
"inputs": [
{
"location": 1,
"name": "color",
"type": "vec3"
},
{
"location": 0,
"name": "position",
"type": "vec4"
}
],
"outputs": [
{
"location": 0,
"name": "v_color",
"type": "vec3"
}
],
"uniformBlocks": [
{
"binding": 0,
"blockName": "buf",
"members": [
{
"matrixStride": 16,
"name": "mvp",
"offset": 0,
"size": 64,
"type": "mat4"
},
{
"name": "opacity",
"offset": 64,
"size": 4,
"type": "float"
}
],
"set": 0,
"size": 68,
"structName": "ubuf"
}
]
}C++ API允许访问上述类似的数据结构。为了简单起见,内部的结构只包含公共数据成员,也考虑到它们的位置不太可能在将来改变。
另请参阅 QShaderBaker 和 QShader。
成员类型文档
枚举 QShaderDescription::BuiltinType
内置变量类型。
| 常量 | 值 |
|---|---|
QShaderDescription::PositionBuiltin | 0 |
QShaderDescription::PointSizeBuiltin | 1 |
QShaderDescription::ClipDistanceBuiltin | 3 |
QShaderDescription::CullDistanceBuiltin | 4 |
QShaderDescription::VertexIdBuiltin | 5 |
QShaderDescription::InstanceIdBuiltin | 6 |
QShaderDescription::PrimitiveIdBuiltin | 7 |
QShaderDescription::InvocationIdBuiltin | 8 |
QShaderDescription::LayerBuiltin | 9 |
QShaderDescription::ViewportIndexBuiltin | 10 |
QShaderDescription::TessLevelOuterBuiltin | 11 |
QShaderDescription::TessLevelInnerBuiltin | 12 |
QShaderDescription::TessCoordBuiltin | 13 |
QShaderDescription::PatchVerticesBuiltin | 14 |
QShaderDescription::FragCoordBuiltin | 15 |
QShaderDescription::PointCoordBuiltin | 16 |
QShaderDescription::FrontFacingBuiltin | 17 |
QShaderDescription::SampleIdBuiltin | 18 |
QShaderDescription::SamplePositionBuiltin | 19 |
QShaderDescription::SampleMaskBuiltin | 20 |
QShaderDescription::FragDepthBuiltin | 22 |
QShaderDescription::NumWorkGroupsBuiltin | 24 |
QShaderDescription::WorkgroupSizeBuiltin | 25 |
QShaderDescription::WorkgroupIdBuiltin | 26 |
QShaderDescription::LocalInvocationIdBuiltin | 27 |
QShaderDescription::GlobalInvocationIdBuiltin | 28 |
QShaderDescription::LocalInvocationIndexBuiltin | 29 |
QShaderDescription::VertexIndexBuiltin | 42 |
QShaderDescription::InstanceIndexBuiltin | 43 |
枚举 QShaderDescription::ImageFlag
QShaderDescription::ImageFlags 标志 QShaderDescription::ImageFlags
图像标志。
| 常量 | 值 |
|---|---|
QShaderDescription::ReadOnlyImage | 1 << 0 |
QShaderDescription::WriteOnlyImage | 1 << 1 |
ImageFlag 类型是 QFlags
枚举 QShaderDescription::ImageFormat
图像格式。
| 常量 | 值 |
|---|---|
QShaderDescription::ImageFormatUnknown | 0 |
QShaderDescription::ImageFormatRgba32f | 1 |
QShaderDescription::ImageFormatRgba16f | 2 |
QShaderDescription::ImageFormatR32f | 3 |
QShaderDescription::ImageFormatRgba8 | 4 |
QShaderDescription::ImageFormatRgba8Snorm | 5 |
QShaderDescription::ImageFormatRg32f | 6 |
QShaderDescription::ImageFormatRg16f | 7 |
QShaderDescription::ImageFormatR11fG11fB10f | 8 |
QShaderDescription::ImageFormatR16f | 9 |
QShaderDescription::ImageFormatRgba16 | 10 |
QShaderDescription::ImageFormatRgb10A2 | 11 |
QShaderDescription::ImageFormatRg16 | 12 |
QShaderDescription::ImageFormatRg8 | 13 |
QShaderDescription::ImageFormatR16 | 14 |
QShaderDescription::ImageFormatR8 | 15 |
QShaderDescription::ImageFormatRgba16Snorm | 16 |
QShaderDescription::ImageFormatRg16Snorm | 17 |
QShaderDescription::ImageFormatRg8Snorm | 18 |
QShaderDescription::ImageFormatR16Snorm | 19 |
QShaderDescription::ImageFormatR8Snorm | 20 |
QShaderDescription::ImageFormatRgba32i | 21 |
QShaderDescription::ImageFormatRgba16i | 22 |
QShaderDescription::ImageFormatRgba8i | 23 |
QShaderDescription::ImageFormatR32i | 24 |
QShaderDescription::ImageFormatRg32i | 25 |
QShaderDescription::ImageFormatRg16i | 26 |
QShaderDescription::ImageFormatRg8i | 27 |
QShaderDescription::ImageFormatR16i | 28 |
QShaderDescription::ImageFormatR8i | 29 |
QShaderDescription::ImageFormatRgba32ui | 30 |
QShaderDescription::ImageFormatRgba16ui | 31 |
QShaderDescription::ImageFormatRgba8ui | 32 |
QShaderDescription::ImageFormatR32ui | 33 |
QShaderDescription::ImageFormatRgb10a2ui | 34 |
QShaderDescription::ImageFormatRg32ui | 35 |
QShaderDescription::ImageFormatRg16ui | 36 |
QShaderDescription::ImageFormatRg8ui | 37 |
QShaderDescription::ImageFormatR16ui | 38 |
QShaderDescription::ImageFormatR8ui | 39 |
枚举 QShaderDescription::QualifierFlag
QShaderDescription::QualifierFlags 标志 QShaderDescription::QualifierFlags
限定符标志。
| 常量 | 值 |
|---|---|
QShaderDescription::QualifierReadOnly | 1 << 0 |
QShaderDescription::QualifierWriteOnly | 1 << 1 |
QShaderDescription::QualifierCoherent | 1 << 2 |
QShaderDescription::QualifierVolatile | 1 << 3 |
QShaderDescription::QualifierRestrict | 1 << 4 |
QualifierFlags 类型是 QFlags<QualifierFlag> 的 typedef。它存储了QualifierFlag值的 OR 组合。
enum QShaderDescription::TessellationMode
| 常量 | 值 |
|---|---|
QShaderDescription::UnknownTessellationMode | 0 |
QShaderDescription::TrianglesTessellationMode | 1 |
QShaderDescription::QuadTessellationMode | 2 |
QShaderDescription::IsolineTessellationMode | 3 |
enum QShaderDescription::TessellationPartitioning
| 常量 | 值 |
|---|---|
QShaderDescription::UnknownTessellationPartitioning | 0 |
QShaderDescription::EqualTessellationPartitioning | 1 |
QShaderDescription::FractionalEvenTessellationPartitioning | 2 |
QShaderDescription::FractionalOddTessellationPartitioning | 3 |
enum QShaderDescription::TessellationWindingOrder
| 常量 | 值 |
|---|---|
QShaderDescription::UnknownTessellationWindingOrder | 0 |
QShaderDescription::CwTessellationWindingOrder | 1 |
QShaderDescription::CcwTessellationWindingOrder | 2 |
enum QShaderDescription::VariableType
表示变量的类型或块成员的类型。
| 常量 | 值 | 描述 |
|---|---|---|
QShaderDescription::Unknown | 0 | |
QShaderDescription::Float | 1 | |
QShaderDescription::Vec2 | 2 | |
QShaderDescription::Vec3 | 3 | |
QShaderDescription::Vec4 | 4 | |
QShaderDescription::Mat2 | 5 | |
QShaderDescription::Mat2x3 | 6 | |
QShaderDescription::Mat2x4 | 7 | |
QShaderDescription::Mat3 | 8 | |
QShaderDescription::Mat3x2 | 9 | |
QShaderDescription::Mat3x4 | 10 | |
QShaderDescription::Mat4 | 11 | |
QShaderDescription::Mat4x2 | 12 | |
QShaderDescription::Mat4x3 | 13 | |
QShaderDescription::Int | 14 | |
QShaderDescription::Int2 | 15 | |
QShaderDescription::Int3 | 16 | |
QShaderDescription::Int4 | 17 | |
QShaderDescription::Uint | 18 | |
QShaderDescription::Uint2 | 19 | |
QShaderDescription::Uint3 | 20 | |
QShaderDescription::Uint4 | 21 | |
QShaderDescription::Bool | 22 | |
QShaderDescription::Bool2 | 23 | |
QShaderDescription::Bool3 | 24 | |
QShaderDescription::Bool4 | 25 | |
QShaderDescription::Double | 26 | |
QShaderDescription::Double2 | 27 | |
QShaderDescription::Double3 | 28 | |
QShaderDescription::Double4 | 29 | |
QShaderDescription::DMat2 | 30 | |
QShaderDescription::DMat2x3 | 31 | |
QShaderDescription::DMat2x4 | 32 | |
QShaderDescription::DMat3 | 33 | |
QShaderDescription::DMat3x2 | 34 | |
QShaderDescription::DMat3x4 | 35 | |
QShaderDescription::DMat4 | 36 | |
QShaderDescription::DMat4x2 | 37 | |
QShaderDescription::DMat4x3 | 38 | |
QShaderDescription::Sampler1D | 39 | |
QShaderDescription::Sampler2D | 40 | |
QShaderDescription::Sampler2DMS | 41 | |
QShaderDescription::Sampler3D | 42 | |
QShaderDescription::SamplerCube | 43 | |
QShaderDescription::Sampler1DArray | 44 | |
QShaderDescription::Sampler2DArray | 45 | |
QShaderDescription::Sampler2DMSArray | 46 | |
QShaderDescription::Sampler3DArray | 47 | |
QShaderDescription::SamplerCubeArray | 48 | |
QShaderDescription::SamplerRect | 49 | |
QShaderDescription::SamplerBuffer | 50 | |
QShaderDescription::SamplerExternalOES | 51 | |
QShaderDescription::Sampler | 52 | 用于独立的采样器。 |
QShaderDescription::Image1D | 53 | |
QShaderDescription::Image2D | 54 | |
QShaderDescription::Image2DMS | 55 | |
QShaderDescription::Image3D | 56 | |
QShaderDescription::ImageCube | 57 | |
QShaderDescription::Image1DArray | 58 | |
QShaderDescription::Image2DArray | 59 | |
QShaderDescription::Image2DMSArray | 60 | |
QShaderDescription::Image3DArray | 61 | |
QShaderDescription::ImageCubeArray | 62 | |
QShaderDescription::ImageRect | 63 | |
QShaderDescription::ImageBuffer | 64 | |
QShaderDescription::Struct | 65 | |
QShaderDescription::Half | 66 | |
QShaderDescription::Half2 | 67 | |
QShaderDescription::Half3 | 68 | |
QShaderDescription::Half4 | 69 |
成员函数文档
QShaderDescription::QShaderDescription()
构造一个新的、空的 QShaderDescription。
注意:为空意味着对于新构造的实例,isValid() 返回 false。
QShaderDescription::QShaderDescription(const QShaderDescription &other)
构造 other 的副本。
[noexcept] QShaderDescription::~QShaderDescription()
析构函数。
QList<QShaderDescription::InOutVariable> QShaderDescription::combinedImageSamplers() const
返回组合图像采样器的列表
使用GLSL/Vulkan着色器作为源代码时,一个 layout(binding = 1) uniform sampler2D tex; 常量生成以下内容:(以文本JSON格式显示)
"combinedImageSamplers": [
{
"binding": 1,
"name": "tex",
"set": 0,
"type": "sampler2D"
}
]这并不意味着其他语言的版本也必须使用组合图像采样器,尤其是在这个概念可能不存在的环境中。例如,一个HSLL版本可能只会使用Texture2D和SamplerState对象,分别称为寄存器t1和s1。
std::array<uint, 3> QShaderDescription::computeShaderLocalSize() const
返回计算着色器的本地大小。
例如,对于以下声明的计算着色器,该函数返回{ 256, 16, 1}。
layout(local_size_x = 256, local_size_y = 16, local_size_z = 1) in;
[静态] QShaderDescription QShaderDescription::deserialize(QDataStream *stream, int version)
从stream返回一个新的QShaderDescription。 version指定qsb版本。
另请参阅序列化。
QList<QShaderDescription::BuiltinVariable> QShaderDescription::inputBuiltinVariables() const
返回作为输入使用的活动内置列表。例如,一个读取gl_TessCoord和gl_Position值的光栅化评估着色器将在这里列出
QList<QShaderDescription::InOutVariable> QShaderDescription::inputVariables() const
返回输入变量的列表。这包括顶点阶段的顶点输入(有时称为属性),以及其他阶段的输入(有时称为变元)。
bool QShaderDescription::isValid() const
如果QShaderDescription包含变量列表中的一个条目,则返回true。
QList<QShaderDescription::BuiltinVariable> QShaderDescription::outputBuiltinVariables() const
返回用作输入的活跃内置变量列表。例如,一个非常常用的顶点着色器将会将
QList<QShaderDescription::InOutVariable> QShaderDescription::outputVariables() const
返回输出变量的列表。
QList<QShaderDescription::PushConstantBlock> QShaderDescription::pushConstantBlocks() const
返回推送常量块的列表。
注意:避免在要将Qt渲染硬件接口一起使用的着色器中依靠推送常量块,因为目前没有对其的支持。
void QShaderDescription::serialize(QDataStream *stream, int version) const
将此QShaderDescription序列化到stream。 version指定qsb版本。
另请参阅deserialize() 和 toJson。
QList<QShaderDescription::StorageBlock> QShaderDescription::storageBlocks() const
返回着色器存储块列表。
例如,对于GLSL/Vulkan着色器作为源代码,声明
struct Stuff {
vec2 a;
vec2 b;
};
layout(std140, binding = 0) buffer StuffSsbo {
vec4 whatever;
Stuff stuff[];
} buf;生成以下内容:(此处以文本JSON的形式展示)
"storageBlocks": [ {
"binding": 0,
"blockName": "StuffSsbo",
"instanceName": "buf",
"knownSize": 16,
"runtimeArrayStride": 16
"members": [
{
"name": "whatever",
"offset": 0,
"size": 16,
"type": "vec4"
},
{
"arrayDims": [
0
],
"name": "stuff",
"offset": 16,
"size": 0,
"structMembers": [
{
"name": "a",
"offset": 0,
"size": 8,
"type": "vec2"
},
{
"name": "b",
"offset": 8,
"size": 8,
"type": "vec2"
}
],
"type": "struct"
}
],
"set": 0
} ]注意:存储块中最后一个成员的大小未定义。这显示为size 0和数组维度为[0]。由于最后一个成员的大小将只在运行时才知道,所以knownSize不包括最后一个成员的大小。最后一个成员具有未定义数组大小的数组项之间的字节数为runtimeArrayStride。此值根据指定的缓冲区内存布局标准(std140、std430)的规则确定。
注意:一些图形API不支持SSBOs,例如,OpenGL 2.x 或 OpenGL ES 3.1 之前的版本。
QList<QShaderDescription::InOutVariable> QShaderDescription::storageImages() const
返回图像变量列表。
这些变量可能出现在计算着色器中。例如,layout (binding = 0, rgba8) uniform readonly image2D inputImage;生成以下内容:(此处以文本JSON的形式展示)
"storageImages": [
{
"binding": 0,
"imageFormat": "rgba8",
"name": "inputImage",
"set": 0,
"type": "image2D"
}
]注意:与某些图形API不兼容,例如OpenGL 2.x或OpenGL ES 3.1之前的版本,不能使用单独的图像对象。
Q ShaderDescription :: TessellationMode QShaderDescription::tessellationMode() const
返回用于着色器细分或评估着色器的细分执行模式。
如果没有设置,返回的值是 UnknownTessellationMode。
例如,对于以下声明的细分评估着色器,该函数返回 TrianglesTessellationMode。
layout(triangles) in;
uint QShaderDescription::tessellationOutputVertexCount() const
返回输出顶点的数量。
例如,对于以下声明的细分控制着色器,该函数返回 3。
layout(vertices = 3) out;
Q ShaderDescription :: TessellationPartitioning QShaderDescription::tessellationPartitioning() const
返回用于细分控制或评估着色器的细分分区模式。
如果没有设置,返回值是 UnknownTessellationPartitioning。
例如,对于以下声明的细分评估着色器,该函数返回 FractionalOddTessellationPartitioning。
layout(triangles, fractional_odd_spacing, ccw) in;
Q ShaderDescription :: TessellationWindingOrder QShaderDescription::tessellationWindingOrder() const
返回用于细分控制或评估着色器的细分接线顺序。
如果没有设置,返回值是 UnknownTessellationWindingOrder。
例如,对于一个具有以下声明的镶嵌评估着色器,该函数返回CcwTessellationWindingOrder。
layout(triangles, fractional_odd_spacing, ccw) in;
QByteArray QShaderDescription::toJson() const
返回数据的序列化JSON文本版本。
注意:没有提供JSON文本的反序列化方法。
另请参阅序列化。
QList<QShaderDescription::UniformBlock> QShaderDescription::uniformBlocks() const
返回统一块列表。
QShaderDescription &QShaderDescription::operator=(const QShaderDescription &other)
将other分配给此对象。
相关非成员函数
[noexcept] bool operator==(const QShaderDescription &lhs, const QShaderDescription &rhs)
如果两个QShaderDescription对象 lhs 和 rhs 相等,则返回true。
© 2024 The Qt Company Ltd. 本文档中的文档贡献归各自所有者所有。本机构提供的文档是根据自由软件基金会发布的GNU自由文档许可版本1.3的条款颁发的。Qt和相应的标志是芬兰及其它国家的商标,归The Qt Company Ltd.所有。其他所有商标归各自所有者所有。