QShaderDescription Class

シェーダーのインターフェイスを記述します。詳細...

ヘッダー #include <QShaderDescription>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui
以来:Qt 6.6

パブリックタイプ

(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)

詳細説明

警告 QShader や QShaderDescription を含む Qt GUI モジュールのQRhi ファミリーのクラスは、限られた互換性しか保証していません。これらのクラスにはソース互換性もバイナリ互換性も保証されていません。つまり、APIはアプリケーションが開発されたQtバージョンでのみ動作することが保証されています。しかし、ソース互換性のない変更は最小限にとどめることを目的としており、マイナーリリース(6.7、6.8など)のみで行われます。これらのクラスをアプリケーションで使用するには、Qt::GuiPrivate (CMake を使用している場合)にリンクし、rhi のプレフィックスを付けてヘッダをインクルードします(例:#include <rhi/qshaderdescription.h> )。

シェーダには通常、入力と出力のセットがあります。たとえば、バーテックスシェーダはいくつかの入力変数を持ち、 アプリケーションが提供するデータ(モデルビュー行列など)にアクセスするた めに、1 つまたは複数のユニフォームバッファを使用することができます。フラグメントステージのシェーダは、(単純なセットアップでは)バー テックスステージからデータを受け取り、ユニフォームバッファ、イ メージ、サンプラからのデータにも依存するかもしれません。

頂点入力とユニフォームバッファのレイアウト(メンバの名前は何か、サイズ、オフセットなど)に関しては、アプリケーションとフレームワークは実行時に動的にこれを発見する必要があるかもしれません。これは、シェーダーがビルトインではなく、ユーザーのような外部エンティティによって提供される場合に典型的です。

近代的で無駄のないグラフィックス 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;
}

このシェーダには 2 つの入力があります:vec4 タイプを持つ 0 の位置のposition と、vec3 タイプを持つ 1 の位置のcolor です:v_color出力は1つです。さらに重要なのは、バインディング0に68バイトのサイズを持つ一様ブロックがあり、オフセット0にmvp という名前の4x4行列、オフセット64にopacity という浮動小数点数の2つのメンバがあります。

これらはすべてQShaderDescriptionオブジェクトによって記述されます。QShaderDescription は、QDataStream を介して JSON やバイナリ形式にシリアライズすることができ、このバイナリ形式からデシリアライズすることもできます。実際には、QShader が関連する QShaderDescription を自動的に処理するため、この処理が必要になることはほとんどありませんが、上記のシェーダの QShaderDescription を(qsb ツールの-d オプションで実行されるように)JSON として書き出すと、次のようになります:

{
    "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 では、上記のようなデータ構造にアクセスできます。C++のAPIでは、上記のようなデータ構造にアクセスすることができます。簡単にするために、内部構造体にはパブリックデータメンバーしか含まれていません。

QShaderBaker およびQShaderも参照して ください。

メンバ型ドキュメント

enum QShaderDescription::BuiltinType

内蔵変数タイプ。

定数
QShaderDescription::PositionBuiltin0
QShaderDescription::PointSizeBuiltin1
QShaderDescription::ClipDistanceBuiltin3
QShaderDescription::CullDistanceBuiltin4
QShaderDescription::VertexIdBuiltin5
QShaderDescription::InstanceIdBuiltin6
QShaderDescription::PrimitiveIdBuiltin7
QShaderDescription::InvocationIdBuiltin8
QShaderDescription::LayerBuiltin9
QShaderDescription::ViewportIndexBuiltin10
QShaderDescription::TessLevelOuterBuiltin11
QShaderDescription::TessLevelInnerBuiltin12
QShaderDescription::TessCoordBuiltin13
QShaderDescription::PatchVerticesBuiltin14
QShaderDescription::FragCoordBuiltin15
QShaderDescription::PointCoordBuiltin16
QShaderDescription::FrontFacingBuiltin17
QShaderDescription::SampleIdBuiltin18
QShaderDescription::SamplePositionBuiltin19
QShaderDescription::SampleMaskBuiltin20
QShaderDescription::FragDepthBuiltin22
QShaderDescription::NumWorkGroupsBuiltin24
QShaderDescription::WorkgroupSizeBuiltin25
QShaderDescription::WorkgroupIdBuiltin26
QShaderDescription::LocalInvocationIdBuiltin27
QShaderDescription::GlobalInvocationIdBuiltin28
QShaderDescription::LocalInvocationIndexBuiltin29
QShaderDescription::VertexIndexBuiltin42
QShaderDescription::InstanceIndexBuiltin43

enum QShaderDescription::ImageFlag
flags QShaderDescription::ImageFlags

イメージフラグ。

定数
QShaderDescription::ReadOnlyImage1 << 0
QShaderDescription::WriteOnlyImage1 << 1

ImageFlags 型はQFlags<ImageFlag> の typedef です。これは、ImageFlag 値の OR の組み合わせを格納します。

enum QShaderDescription::ImageFormat

画像フォーマット

定数
QShaderDescription::ImageFormatUnknown0
QShaderDescription::ImageFormatRgba32f1
QShaderDescription::ImageFormatRgba16f2
QShaderDescription::ImageFormatR32f3
QShaderDescription::ImageFormatRgba84
QShaderDescription::ImageFormatRgba8Snorm5
QShaderDescription::ImageFormatRg32f6
QShaderDescription::ImageFormatRg16f7
QShaderDescription::ImageFormatR11fG11fB10f8
QShaderDescription::ImageFormatR16f9
QShaderDescription::ImageFormatRgba1610
QShaderDescription::ImageFormatRgb10A211
QShaderDescription::ImageFormatRg1612
QShaderDescription::ImageFormatRg813
QShaderDescription::ImageFormatR1614
QShaderDescription::ImageFormatR815
QShaderDescription::ImageFormatRgba16Snorm16
QShaderDescription::ImageFormatRg16Snorm17
QShaderDescription::ImageFormatRg8Snorm18
QShaderDescription::ImageFormatR16Snorm19
QShaderDescription::ImageFormatR8Snorm20
QShaderDescription::ImageFormatRgba32i21
QShaderDescription::ImageFormatRgba16i22
QShaderDescription::ImageFormatRgba8i23
QShaderDescription::ImageFormatR32i24
QShaderDescription::ImageFormatRg32i25
QShaderDescription::ImageFormatRg16i26
QShaderDescription::ImageFormatRg8i27
QShaderDescription::ImageFormatR16i28
QShaderDescription::ImageFormatR8i29
QShaderDescription::ImageFormatRgba32ui30
QShaderDescription::ImageFormatRgba16ui31
QShaderDescription::ImageFormatRgba8ui32
QShaderDescription::ImageFormatR32ui33
QShaderDescription::ImageFormatRgb10a2ui34
QShaderDescription::ImageFormatRg32ui35
QShaderDescription::ImageFormatRg16ui36
QShaderDescription::ImageFormatRg8ui37
QShaderDescription::ImageFormatR16ui38
QShaderDescription::ImageFormatR8ui39

enum QShaderDescription::QualifierFlag
flags QShaderDescription::QualifierFlags

Qualifier フラグ。

定数
QShaderDescription::QualifierReadOnly1 << 0
QShaderDescription::QualifierWriteOnly1 << 1
QShaderDescription::QualifierCoherent1 << 2
QShaderDescription::QualifierVolatile1 << 3
QShaderDescription::QualifierRestrict1 << 4

QualifierFlags 型はQFlags<QualifierFlag> の typedef です。QualifierFlags 値の OR の組み合わせを格納します。

enum QShaderDescription::TessellationMode

定数定数
QShaderDescription::UnknownTessellationMode0
QShaderDescription::TrianglesTessellationMode1
QShaderDescription::QuadTessellationMode2
QShaderDescription::IsolineTessellationMode3

enum QShaderDescription::TessellationPartitioning

定数定数
QShaderDescription::UnknownTessellationPartitioning0
QShaderDescription::EqualTessellationPartitioning1
QShaderDescription::FractionalEvenTessellationPartitioning2
QShaderDescription::FractionalOddTessellationPartitioning3

enum QShaderDescription::TessellationWindingOrder

定数定数
QShaderDescription::UnknownTessellationWindingOrder0
QShaderDescription::CwTessellationWindingOrder1
QShaderDescription::CcwTessellationWindingOrder2

enum QShaderDescription::VariableType

変数またはブロック・メンバーの型を表す。

定数説明
QShaderDescription::Unknown0
QShaderDescription::Float1
QShaderDescription::Vec22
QShaderDescription::Vec33
QShaderDescription::Vec44
QShaderDescription::Mat25
QShaderDescription::Mat2x36
QShaderDescription::Mat2x47
QShaderDescription::Mat38
QShaderDescription::Mat3x29
QShaderDescription::Mat3x410
QShaderDescription::Mat411
QShaderDescription::Mat4x212
QShaderDescription::Mat4x313
QShaderDescription::Int14
QShaderDescription::Int215
QShaderDescription::Int316
QShaderDescription::Int417
QShaderDescription::Uint18
QShaderDescription::Uint219
QShaderDescription::Uint320
QShaderDescription::Uint421
QShaderDescription::Bool22
QShaderDescription::Bool223
QShaderDescription::Bool324
QShaderDescription::Bool425
QShaderDescription::Double26
QShaderDescription::Double227
QShaderDescription::Double328
QShaderDescription::Double429
QShaderDescription::DMat230
QShaderDescription::DMat2x331
QShaderDescription::DMat2x432
QShaderDescription::DMat333
QShaderDescription::DMat3x234
QShaderDescription::DMat3x435
QShaderDescription::DMat436
QShaderDescription::DMat4x237
QShaderDescription::DMat4x338
QShaderDescription::Sampler1D39
QShaderDescription::Sampler2D40
QShaderDescription::Sampler2DMS41
QShaderDescription::Sampler3D42
QShaderDescription::SamplerCube43
QShaderDescription::Sampler1DArray44
QShaderDescription::Sampler2DArray45
QShaderDescription::Sampler2DMSArray46
QShaderDescription::Sampler3DArray47
QShaderDescription::SamplerCubeArray48
QShaderDescription::SamplerRect49
QShaderDescription::SamplerBuffer50
QShaderDescription::SamplerExternalOES51
QShaderDescription::Sampler52個別サンプラー用
QShaderDescription::Image1D53
QShaderDescription::Image2D54
QShaderDescription::Image2DMS55
QShaderDescription::Image3D56
QShaderDescription::ImageCube57
QShaderDescription::Image1DArray58
QShaderDescription::Image2DArray59
QShaderDescription::Image2DMSArray60
QShaderDescription::Image3DArray61
QShaderDescription::ImageCubeArray62
QShaderDescription::ImageRect63
QShaderDescription::ImageBuffer64
QShaderDescription::Struct65
QShaderDescription::Half66
QShaderDescription::Half267
QShaderDescription::Half368
QShaderDescription::Half469

メンバ関数ドキュメント

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"
     }
 ]

これは、シェーダーの他の言語バージョンも結合イメージサンプラーを使用しなければならないという意味ではありません。たとえば、HLSLバージョンは、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;

[static] QShaderDescription QShaderDescription::deserialize(QDataStream *stream, int version)

stream からロードされた新しいQShaderDescription を返す。version は qsb のバージョンを指定する。

serialize()も参照のこと

QList<QShaderDescription::BuiltinVariable> QShaderDescription::inputBuiltinVariables() const

入力として使用されるアクティブなビルトインのリストを返します。例えば、gl_TessCoord と gl_Position の値を読み取るテッセレーション評価シェーダは、TessCoordBuiltinPositionBuiltin がここにリストされます。

QList<QShaderDescription::InOutVariable> QShaderDescription::inputVariables() const

入力変数のリストを返します。これには、頂点ステージの頂点入力(attributesと呼ばれることもある)と、他のステージの入力(variationingと呼ばれることもある)が含まれる。

bool QShaderDescription::isValid() const

QShaderDescription が変数リストとブロックリストのいずれかに少なくとも1つのエントリーを含んでいれば真を返す。

QList<QShaderDescription::BuiltinVariable> QShaderDescription::outputBuiltinVariables() const

入力として使用されるアクティブな組み込み変数のリストを返します。たとえば、頂点シェーダはPositionBuiltin を出力組込み変数として持つことがよくあります。

QList<QShaderDescription::InOutVariable> QShaderDescription::outputVariables() const

出力変数のリストを返します。

QList<QShaderDescription::PushConstantBlock> QShaderDescription::pushConstantBlocks() const

プッシュ定数ブロックのリストを返します。

注意: Qt Rendering Hardware Interface と組み合わせて使用するシェーダでは、プッシュ定数ブロックに依存しないようにしてください。

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)の規則に従って決定される。

注意: SSBOは、OpenGL 2.xや3.1より古いOpenGL ESなど、一部のグラフィックスAPIでは利用できない。

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"
     }
 ]

注意: 個別のイメージ・オブジェクトは、OpenGL 2.xや3.1より古いOpenGL ESなど、一部のグラフィックスAPIと互換性がありません。

QShaderDescription::TessellationMode QShaderDescription::tessellationMode() const

テッセレーションコントロールまたは評価シェーダーのテッセレーション実行モードを返します。

設定されていない場合、返される値はUnknownTessellationMode です。

例えば、以下の宣言を持つテッセレーション評価シェーダの場合、関数はTrianglesTessellationMode を返します。

layout(triangles) in;

uint QShaderDescription::tessellationOutputVertexCount() const

出力頂点の数を返します。

例えば、次のような宣言を持つテッセレーションコントロールシェーダーの場合、関数は3を返します。

layout(vertices = 3) out;

QShaderDescription::TessellationPartitioning QShaderDescription::tessellationPartitioning() const

テッセレーションコントロールまたは評価シェーダーのテッセレーション分割モードを返します。

設定されていない場合、返される値はUnknownTessellationPartitioning です。

例えば、以下の宣言を持つテッセレーション評価シェーダーの場合、関数はFractionalOddTessellationPartitioning を返します。

layout(triangles, fractional_odd_spacing, ccw) in;

QShaderDescription::TessellationWindingOrder QShaderDescription::tessellationWindingOrder() const

テッセレーションコントロールまたは評価シェーダーのテッセレーション巻き順を返します。

設定されていない場合、返される値はUnknownTessellationWindingOrder です。

例えば、以下の宣言を持つテッセレーション評価シェーダの場合、関数はCcwTessellationWindingOrder を返します。

layout(triangles, fractional_odd_spacing, ccw) in;

QByteArray QShaderDescription::toJson() const

シリアライズされたJSONテキストバージョンのデータを返します。

注意: JSON テキスト用のデシリアライズ・メソッドは用意されていません。

serialize()も参照 ください。

QList<QShaderDescription::UniformBlock> QShaderDescription::uniformBlocks() const

ユニフォーム・ブロックのリストを返す。

QShaderDescription &QShaderDescription::operator=(const QShaderDescription &other)

このオブジェクトにother を割り当てる。

関連する非会員

[noexcept] bool operator==(const QShaderDescription &lhs, const QShaderDescription &rhs)

2つのQShaderDescription オブジェクトlhsrhs が等しい場合、true を返す。

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