QShaderDescription Class

Beschreibt die Schnittstelle eines Shaders. Mehr...

Kopfzeile: #include <QShaderDescription>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui
Since: Qt 6.6

Öffentliche Typen

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

Öffentliche Funktionen

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)

Statische öffentliche Mitglieder

QShaderDescription deserialize(QDataStream *stream, int version)
bool operator==(const QShaderDescription &lhs, const QShaderDescription &rhs)

Detaillierte Beschreibung

Warnung: Die QRhi Familie von Klassen im Qt Gui Modul, einschließlich QShader und QShaderDescription, bieten begrenzte Kompatibilitätsgarantien. Es gibt keine Quell- oder Binärkompatibilitätsgarantien für diese Klassen, was bedeutet, dass die API nur mit der Qt-Version funktioniert, mit der die Anwendung entwickelt wurde. Quellcode-inkompatible Änderungen sollen jedoch so gering wie möglich gehalten werden und werden nur in kleineren Versionen (6.7, 6.8, usw.) vorgenommen. Um diese Klassen in einer Anwendung zu verwenden, verlinken Sie zu Qt::GuiPrivate (wenn Sie CMake verwenden) und fügen Sie die Header mit dem Präfix rhi ein, zum Beispiel #include <rhi/qshaderdescription.h>.

Ein Shader hat normalerweise eine Reihe von Eingängen und Ausgängen. Ein Vertex-Shader hat zum Beispiel eine Reihe von Eingabevariablen und kann einen oder mehrere einheitliche Puffer verwenden, um auf Daten zuzugreifen (z. B. eine Modelview-Matrix), die von der Anwendung bereitgestellt werden. Der Shader für die Fragment-Stufe erhält Daten von der Vertex-Stufe (in einem einfachen Setup) und kann auch auf Daten aus Uniform Buffern, Bildern und Samplern zurückgreifen.

Was die Scheitelpunkt-Eingaben und das Layout der einheitlichen Puffer betrifft (wie lauten die Namen der Elemente, wie groß sind sie, wie groß ist ihr Offset usw.), so müssen Anwendungen und Frameworks dies möglicherweise dynamisch zur Laufzeit ermitteln. Dies ist typisch, wenn der Shader nicht eingebaut ist, sondern von einer externen Instanz, wie dem Benutzer, bereitgestellt wird.

Moderne und schlanke Grafik-APIs bieten möglicherweise keine Möglichkeit mehr, Shader-Reflection-Informationen zur Laufzeit abzufragen. Daher werden solche Daten nun automatisch von QShaderBaker generiert und als QShaderDescription-Objekt für jeden QShader bereitgestellt.

Beispiel

Nehmen Sie den folgenden Vertex-Shader:

#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;
}

Dieser Shader hat zwei Eingaben: position an Position 0 mit einem Typ von vec4 und color an Position 1 mit einem Typ von vec3. Er hat eine Ausgabe: v_color Er hat einen Ausgang, der aber für Anwendungen normalerweise nicht interessant ist. Wichtiger ist, dass es einen einheitlichen Block an der Bindung 0 mit einer Größe von 68 Byte und zwei Mitgliedern gibt, eine 4x4-Matrix mit dem Namen mvp an Offset 0 und einen Float opacity an Offset 64.

All dies wird durch ein QShaderDescription-Objekt beschrieben. QShaderDescription kann über QDataStream in JSON und in ein Binärformat serialisiert und aus diesem Binärformat deserialisiert werden. In der Praxis wird dies nur selten benötigt, da QShader sich automatisch um die zugehörige QShaderDescription kümmert, aber wenn die QShaderDescription des obigen Shaders als JSON ausgegeben würde (wie es die Option -d des Tools qsb tut), würde sie wie folgt aussehen:

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

Die C++-API ermöglicht den Zugriff auf eine Datenstruktur wie die obige. Der Einfachheit halber enthalten die inneren Strukturen nur öffentliche Datenelemente, auch in Anbetracht der Tatsache, dass sich ihr Layout in Zukunft wahrscheinlich nicht ändern wird.

Siehe auch QShaderBaker und QShader.

Dokumentation der Mitgliedstypen

enum QShaderDescription::BuiltinType

Eingebauter Variablentyp.

KonstanteWert
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

Bild-Flags.

KonstanteWert
QShaderDescription::ReadOnlyImage1 << 0
QShaderDescription::WriteOnlyImage1 << 1

Der Typ ImageFlags ist ein Typedef für QFlags<ImageFlag>. Er speichert eine ODER-Kombination von ImageFlag-Werten.

enum QShaderDescription::ImageFormat

Bildformat.

KonstanteWert
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-Flags.

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

Der Typ QualifierFlags ist ein Typedef für QFlags<QualifierFlag>. Er speichert eine ODER-Kombination von QualifierFlag-Werten.

enum QShaderDescription::TessellationMode

KonstanteWert
QShaderDescription::UnknownTessellationMode0
QShaderDescription::TrianglesTessellationMode1
QShaderDescription::QuadTessellationMode2
QShaderDescription::IsolineTessellationMode3

enum QShaderDescription::TessellationPartitioning

KonstanteWert
QShaderDescription::UnknownTessellationPartitioning0
QShaderDescription::EqualTessellationPartitioning1
QShaderDescription::FractionalEvenTessellationPartitioning2
QShaderDescription::FractionalOddTessellationPartitioning3

enum QShaderDescription::TessellationWindingOrder

KonstanteWert
QShaderDescription::UnknownTessellationWindingOrder0
QShaderDescription::CwTessellationWindingOrder1
QShaderDescription::CcwTessellationWindingOrder2

enum QShaderDescription::VariableType

Stellt den Typ einer Variablen oder eines Blockelements dar.

KonstanteWertBeschreibung
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::Sampler52Für separate Probenehmer.
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

Dokumentation der Mitgliedsfunktionen

QShaderDescription::QShaderDescription()

Konstruiert eine neue, leere QShaderDescription.

Hinweis: Leer zu sein bedeutet, dass isValid() false für die neu konstruierte Instanz zurückgibt.

QShaderDescription::QShaderDescription(const QShaderDescription &other)

Konstruiert eine Kopie von other.

[noexcept] QShaderDescription::~QShaderDescription()

Zerstörer.

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

Gibt die Liste der kombinierten Bild-Sampler zurück

Mit GLSL/Vulkan-Shadern als Quelle erzeugt ein layout(binding = 1) uniform sampler2D tex; uniform folgendes: (hier als textuelles JSON dargestellt)

"combinedImageSamplers": [
     {
         "binding": 1,
         "name": "tex",
         "set": 0,
         "type": "sampler2D"
     }
 ]

Dies bedeutet nicht, dass andere Sprachversionen des Shaders auch einen kombinierten Bild-Sampler verwenden müssen, insbesondere wenn man bedenkt, dass das Konzept nicht überall existiert. Zum Beispiel wird eine HLSL-Version wahrscheinlich nur ein Texture2D- und SamplerState-Objekt mit den Registern t1 bzw. s1 verwenden.

std::array<uint, 3> QShaderDescription::computeShaderLocalSize() const

Gibt die lokale Größe eines Compute-Shaders zurück.

Für einen Compute-Shader mit der folgenden Deklaration gibt die Funktion zum Beispiel { 256, 16, 1} zurück.

layout(local_size_x = 256, local_size_y = 16, local_size_z = 1) in;

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

Gibt ein neues QShaderDescription zurück, das von stream geladen wurde. version gibt die qsb-Version an.

Siehe auch serialize().

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

Gibt die Liste der aktiven Buildins zurück, die als Eingabe verwendet werden. Bei einem Tessellierungsbewertungs-Shader, der den Wert von gl_TessCoord und gl_Position liest, werden hier beispielsweise TessCoordBuiltin und PositionBuiltin aufgeführt.

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

Gibt die Liste der Eingabevariablen zurück. Dazu gehören Scheitelpunkt-Eingaben (manchmal Attribute genannt) für die Scheitelpunkt-Stufe und Eingaben für andere Stufen (manchmal Variationen genannt).

bool QShaderDescription::isValid() const

Gibt true zurück, wenn QShaderDescription mindestens einen Eintrag in einer der Variablen- und Blocklisten enthält.

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

Gibt die Liste der aktiven eingebauten Variablen zurück, die als Eingabe verwendet werden. Ein Vertex-Shader hat z. B. sehr oft PositionBuiltin als integrierte Ausgabevariable.

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

Gibt die Liste der Ausgabevariablen zurück.

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

Gibt die Liste der Push-Konstantenblöcke zurück.

Hinweis: Vermeiden Sie es, sich auf Push-Konstantenblöcke für Shader zu verlassen, die in Kombination mit dem Qt Rendering Hardware Interface verwendet werden sollen, da dieses derzeit keine Unterstützung für sie bietet.

void QShaderDescription::serialize(QDataStream *stream, int version) const

Serialisiert dieses QShaderDescription zu stream. version gibt die qsb-Version an.

Siehe auch deserialize() und toJson().

QList<QShaderDescription::StorageBlock> QShaderDescription::storageBlocks() const

Gibt die Liste der Shader-Speicherblöcke zurück.

Zum Beispiel, mit GLSL/Vulkan Shadern als Quelle, erzeugt die Deklaration

struct Stuff {
    vec2 a;
    vec2 b;
};
layout(std140, binding = 0) buffer StuffSsbo {
    vec4 whatever;
    Stuff stuff[];
} buf;

das Folgende erzeugt: (hier als textuelles JSON dargestellt)

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

Hinweis: Die Größe des letzten Elements im Speicherblock ist undefiniert. Dies wird als size 0 und eine Array-Dimension von [0] angezeigt. knownSize des Speicherblocks schließt die Größe des letzten Elements aus, da diese erst zur Laufzeit bekannt ist. Der Abstand in Bytes zwischen den Arrayelementen für ein letztes Element mit undefinierter Array-Größe ist runtimeArrayStride. Dieser Wert wird nach den Regeln des spezifizierten Pufferspeicher-Layout-Standards (std140, std430) bestimmt.

Hinweis: SSBOs sind bei einigen Grafik-APIs nicht verfügbar, z. B. bei OpenGL 2.x oder OpenGL ES älter als 3.1.

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

Gibt die Liste der Bildvariablen zurück.

Diese werden wahrscheinlich in Compute-Shadern vorkommen. Zum Beispiel erzeugt layout (binding = 0, rgba8) uniform readonly image2D inputImage; das Folgende: (hier als textuelles JSON dargestellt)

"storageImages": [
     {
         "binding": 0,
         "imageFormat": "rgba8",
         "name": "inputImage",
         "set": 0,
         "type": "image2D"
     }
 ]

Hinweis: Separate Bildobjekte sind nicht mit einigen Grafik-APIs kompatibel, wie z. B. OpenGL 2.x oder OpenGL ES älter als 3.1.

QShaderDescription::TessellationMode QShaderDescription::tessellationMode() const

Gibt den Tesselation-Ausführungsmodus für ein Tesselation-Steuerelement oder einen Evaluierungs-Shader zurück.

Wenn er nicht festgelegt ist, lautet der Rückgabewert UnknownTessellationMode.

Für einen Tessellierungs-Evaluierungs-Shader mit der folgenden Deklaration gibt die Funktion beispielsweise TrianglesTessellationMode zurück.

layout(triangles) in;

uint QShaderDescription::tessellationOutputVertexCount() const

Gibt die Anzahl der ausgegebenen Scheitelpunkte zurück.

Für einen Tessellation Control Shader mit der folgenden Deklaration gibt die Funktion zum Beispiel 3 zurück.

layout(vertices = 3) out;

QShaderDescription::TessellationPartitioning QShaderDescription::tessellationPartitioning() const

Gibt den Tessellierungs-Partitionierungsmodus für ein Tessellierungs-Steuerelement oder einen Evaluierungs-Shader zurück.

Wenn er nicht festgelegt ist, lautet der Rückgabewert UnknownTessellationPartitioning.

Für einen Tessellierungs-Evaluierungs-Shader mit der folgenden Deklaration gibt die Funktion beispielsweise FractionalOddTessellationPartitioning zurück.

layout(triangles, fractional_odd_spacing, ccw) in;

QShaderDescription::TessellationWindingOrder QShaderDescription::tessellationWindingOrder() const

Gibt die Reihenfolge der Tessellierung für ein Tessellierungs-Steuerelement oder einen Evaluierungs-Shader zurück.

Wenn nicht festgelegt, ist der zurückgegebene Wert UnknownTessellationWindingOrder.

Für einen Tessellierungs-Evaluierungs-Shader mit der folgenden Deklaration gibt die Funktion zum Beispiel CcwTessellationWindingOrder zurück.

layout(triangles, fractional_odd_spacing, ccw) in;

QByteArray QShaderDescription::toJson() const

Gibt eine serialisierte JSON-Textversion der Daten zurück.

Hinweis: Für JSON-Text gibt es keine Deserialisierungsmethode.

Siehe auch serialize().

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

Gibt die Liste der einheitlichen Blöcke zurück.

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

Weist diesem Objekt other zu.

Verwandte Nicht-Mitglieder

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

Gibt true zurück, wenn die beiden Objekte QShaderDescription lhs und rhs gleich sind.

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