このページでは

QShaderDescription Class

シェーダーのインターフェースについて説明します。詳細...

ヘッダー: #include <qshaderdescription.h>
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, …, ViewIndexBuiltin }
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など)でのみ行われます。アプリケーションでこれらのクラスを使用するには、(CMakeを使用している場合は)Qt::GuiPrivate にリンクし、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つの入力があります。位置0にある型がvec4 のposition と、位置1にある型がvec3 のcolor です。出力は1つ、v_color ですが、これは通常、アプリケーションにとっては重要ではありません。 さらに重要な点として、バインディング 0 には、サイズ 68 バイトのユニフォームブロックがあり、2 つのメンバー、オフセット 0 にあるmvp という名前の 4x4 行列と、オフセット 64 にある float 型の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も参照してください 。

メンバ型のドキュメント

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
QShaderDescription::ViewIndexBuiltin4440

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

修飾子フラグ。

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

QualifierFlags 型は、QFlags<QualifierFlag> の typedef です。これは、QualifierFlag 値の論理和(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 の値を読み取るテッセレーション評価シェーダーの場合、ここにはTessCoordBuiltin およびPositionBuiltin がリストされます。

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

入力変数のリストを返します。これには、頂点ステージ用の頂点入力(属性と呼ばれることもあります)や、その他のステージ用の入力(バリアリングと呼ばれることもあります)が含まれます。

bool QShaderDescription::isValid() const

QShaderDescription に、変数リストまたはブロックリストのいずれかに少なくとも1つのエントリが含まれている場合、trueを返します。

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 や OpenGL ES 3.1 より前のバージョンなど、一部のグラフィックス 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 オブジェクトlhs とrhs が等しい場合、true を返します。

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