Auf dieser Seite

QShaderBaker Class

Kompiliert einen GLSL-/Vulkan-Shader in SPIR-V, übersetzt ihn in andere Shading-Sprachen und sammelt Metadaten zur Reflexion. Mehr...

Header: #include <qshaderbaker.h>
CMake: find_package(Qt6 REQUIRED COMPONENTS ShaderTools)
target_link_libraries(mytarget PRIVATE Qt6::ShaderTools)
Seit: Qt 6.6

Öffentliche Typen

GeneratedShader
enum class GlslOption { GlslEsFragDefaultFloatPrecisionMedium }
flags GlslOptions
enum class SpirvOption { GenerateFullDebugInfo, StripDebugAndVarInfo }
flags SpirvOptions

Öffentliche Funktionen

QShaderBaker()
~QShaderBaker()
QShader bake()
QString errorMessage() const
void setBatchableVertexShaderExtraInputLocation(int location)
void setBreakOnShaderTranslationError(bool enable)
void setGeneratedShaderVariants(const QList<QShader::Variant> &v)
void setGeneratedShaders(const QList<QShaderBaker::GeneratedShader> &v)
(since 6.9) void setGlslOptions(QShaderBaker::GlslOptions options)
(since 6.7) void setMultiViewCount(int count)
void setPerTargetCompilation(bool enable)
void setPreamble(const QByteArray &preamble)
void setSourceDevice(QIODevice *device, QShader::Stage stage, const QString &fileName = QString())
void setSourceFileName(const QString &fileName)
void setSourceFileName(const QString &fileName, QShader::Stage stage)
void setSourceString(const QByteArray &sourceString, QShader::Stage stage, const QString &fileName = QString())
void setSpirvOptions(QShaderBaker::SpirvOptions options)
void setTessellationMode(QShaderDescription::TessellationMode mode)
void setTessellationOutputVertexCount(int count)

Ausführliche Beschreibung

Warnung: QShaderBaker bietet, genau wie die Klassenfamilie „ QRhi “ im Qt GUI-Modul, einschließlich QShader und QShaderDescription, nur eingeschränkte Kompatibilitätsgarantien. Für diese Klassen gibt es keine Garantien hinsichtlich der Quellcode- oder Binärkompatibilität, was bedeutet, dass die API nur mit der Qt-Version garantiert funktioniert, für die die Anwendung entwickelt wurde. Änderungen, die zu einer Inkompatibilität auf Quellcodeebene führen, sollen jedoch auf ein Minimum beschränkt werden und werden nur in Minor-Releases (6.7, 6.8 usw.) vorgenommen. Um diese Klasse in einer Anwendung zu verwenden, verknüpfen Sie mit „ Qt::ShaderToolsPrivate “ (bei Verwendung von CMake) und binden Sie die Header mit dem Präfix „ rhi “ ein, zum Beispiel „ #include <rhi/qshaderbaker.h> “.

QShaderBaker nimmt einen Grafik- (Vertex-, Fragment-Shader usw.) oder Compute-Shader entgegen und erzeugt daraus mehrere Varianten – entweder im Quellcode oder als Bytecode – zusammen mit Reflektionsinformationen. Die Ergebnisse werden durch eine Instanz von ` QShader ` dargestellt, die zudem eine einfache und schnelle Serialisierung und Deserialisierung ermöglicht.

Hinweis: Anwendungen und Bibliotheken sollten die direkte Verwendung dieser Klasse vermeiden. Stattdessen wird allen Qt-Anwendern empfohlen, auf die Offline-Kompilierung zurückzugreifen, indem sie das Befehlszeilentool „ qsb “ zur Erstellungszeit über CMake aufrufen. Das Tool „ qsb “ nutzt QShaderBaker und schreibt die serialisierte Version des generierten „ QShader “ in eine Datei. Die Verwendung dieser Klasse sollte auf Fälle beschränkt bleiben, in denen eine Laufzeitkompilierung unvermeidbar ist, beispielsweise bei der Arbeit mit benutzerdefinierten oder dynamisch generierten Shader-Quelltextzeichenfolgen.

Als Eingabeformat wird derzeit stets GLSL im Vulkan-Stil vorausgesetzt. Einen Überblick bietet die Spezifikation GL_KHR_vulkan_glsl. Dabei ist zu beachten, dass das Qt-Modul „ Shader Tools “ für die Verwendung in Kombination mit den Klassen „ QRhi “ aus dem Qt-Modul „Rendering Hardware Interface“ vorgesehen ist und daher eine Reihe von Konzepten und Konstrukten (Push-Konstanten, Speicherpuffer, Subpasses, usw.) derzeit nicht anwendbar sind. Zukünftig könnten weitere Optionen eingeführt werden, beispielsweise die Unterstützung von HLSL als Quellformat, sobald die Kompilierung von HLSL zu SPIR-V als geeignet erachtet wird.

Die Reflection-Metadaten können aus dem resultierenden „ QShader “ durch Aufruf von „ QShader::description()“ abgerufen werden. Dies ist unerlässlich, um herauszufinden, welche Vertex-Eingaben und Shader-Ressourcen ein Shader erwartet und wie deren Layouts aussehen, da viele moderne Grafik-APIs keine integrierten Shader-Reflection-Funktionen bieten.

Typischer Arbeitsablauf

Nehmen wir an, eine Anwendung verfügt über einen Vertex- und einen Fragment-Shader wie die 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;
};

void main()
{
    v_color = color;
    gl_Position = mvp * position;
}

Fragment-Shader:

#version 440

layout(location = 0) in vec3 v_color;
layout(location = 0) out vec4 fragColor;

layout(std140, binding = 0) uniform buf {
    mat4 mvp;
    float opacity;
};

void main()
{
    fragColor = vec4(v_color * opacity, opacity);
}

Um „ QShader “-Instanzen zu erhalten, die unverändert an einen ` QRhiGraphicsPipeline` übergeben werden können, gibt es zwei Möglichkeiten: die Shader-Pack-Generierung offline oder zur Laufzeit durchzuführen.

Im ersten Fall wird das Tool „ qsb “ ausgeführt:

qsb --glsl "100 es,120" --hlsl 50 --msl 12 color.vert -o color.vert.qsb
qsb --glsl "100 es,120" --hlsl 50 --msl 12 color.frag -o color.frag.qsb

Das Beispiel verwendet die für „ QRhi “ geeigneten Übersetzungsziele. Das bedeutet: GLSL/ES 100, GLSL 120, HLSL Shader Model 5.0 und Metal Shading Language 1.2.

Beachten Sie, wie die Befehlszeilenoptionen den Angaben entsprechen, die über ` setGeneratedShaders()` festgelegt werden können. Sobald die resultierenden Dateien verfügbar sind, können sie mit der Anwendung ausgeliefert werden (in der Regel über das Qt-Ressourcensystem in die ausführbare Datei eingebettet) und zur Laufzeit geladen sowie an ` QShader::fromSerialized()` übergeben werden.

Auch wenn dies hier nicht gezeigt wird, kann qsb noch mehr: Es ist auch in der Lage, unter Windows „ fxc “ oder unter macOS die entsprechenden XCode-Tools aufzurufen, um den generierten HLSL- oder Metal-Shader-Code in Bytecode zu kompilieren und die kompilierten Versionen in das „ QShader “ einzubinden. Nachdem ein gebackenes Shader-Paket in eine Datei geschrieben wurde, kann dessen Inhalt durch Ausführen von „ qsb -d “ überprüft werden. Führen Sie „ qsb “ mit „ --help “ aus, um weitere Informationen zu erhalten.

Alternativ kann dies auch zur Laufzeit erfolgen. Dazu muss eine `QShaderBaker`-Instanz erstellt, ` setSourceFileName()` aufgerufen und anschließend die Übersetzungsziele über ` setGeneratedShaders()` eingerichtet werden:

baker.setGeneratedShaderVariants({ QShader::StandardShader });
QList<QShaderBaker::GeneratedShader> targets;
targets.append({ QShader::SpirvShader, QShaderVersion(100) });
targets.append({ QShader::GlslShader, QShaderVersion(100, QShaderVersion::GlslEs) });
targets.append({ QShader::SpirvShader, QShaderVersion(120) });
targets.append({ QShader::HlslShader, QShaderVersion(50) });
targets.append({ QShader::MslShader, QShaderVersion(12) });
baker.setGeneratedShaders(targets);
QShader shaders = baker.bake();
if (!shaders.isValid())
    qWarning() << baker.errorMessage();

Siehe auch QShader.

Dokumentation zu Mitgliedstypen

[alias] QShaderBaker::GeneratedShader

Synonym für std::pair<QShader::Source, QShaderVersion>.

enum class QShaderBaker::GlslOption
flags QShaderBaker::GlslOptions

KonstanteWertBeschreibung
QShaderBaker::GlslOption::GlslEsFragDefaultFloatPrecisionMedium0x01Gibt „ precision mediump float; “ in Fragment-Shadern für GLSL ES aus.

Der Typ „GlslOptions“ ist ein Typedef für „QFlags<GlslOption>“. Er speichert eine OR-Kombination von „GlslOption“-Werten.

enum class QShaderBaker::SpirvOption
flags QShaderBaker::SpirvOptions

KonstanteWertBeschreibung
QShaderBaker::SpirvOption::GenerateFullDebugInfo0x01Erzeugt und speichert zusätzliche Debug-Informationen in der SPIR-V-Binärdatei.
QShaderBaker::SpirvOption::StripDebugAndVarInfo0x02Entfernt alle Debug- und Variablennameninformationen aus der SPIR-V-Binärdatei.

Der Typ „SpirvOptions“ ist ein typedef für „QFlags<SpirvOption>“. Er speichert eine OR-Kombination von „SpirvOption“-Werten.

Dokumentation der Mitgliedsfunktionen

QShaderBaker::QShaderBaker()

Erstellt einen neuen QShaderBaker.

[noexcept] QShaderBaker::~QShaderBaker()

Destruktor.

QShader QShaderBaker::bake()

Führt den Kompilierungs- und Übersetzungsprozess durch.

Gibt eine ` QShader `-Instanz zurück. Um zu überprüfen, ob der Vorgang erfolgreich war, rufen Sie ` QShader::isValid()` auf. Wenn dabei „ false “ zurückgegeben wird, rufen Sie ` errorMessage()` auf, um das Protokoll abzurufen.

Dies ist ein rechenintensiver Vorgang. Beim Aufruf aus Anwendungen heraus kann es ratsam sein, dies in einem separaten Thread durchzuführen.

Hinweis: „ QShaderBaker “-Instanzen sind wiederverwendbar: Nach dem Aufruf von `bake()` kann dieselbe Instanz erneut mit unterschiedlichen Eingaben verwendet werden. Eine „ QShaderBaker “-Instanz sollte jedoch während ihrer Lebensdauer nur in einem einzigen Thread verwendet werden.

QString QShaderBaker::errorMessage() const

Gibt die Fehlermeldung des letzten Aufrufs von ` bake()` zurück oder eine leere Zeichenkette, wenn kein Fehler aufgetreten ist.

Hinweis: Zuden Fehlern zählen Fehler beim Einlesen von Dateien sowie Kompilierungs- und Übersetzungsfehler. Das Fehlen von Ziel- oder Variantenangaben gilt nicht als Fehler, auch wenn die resultierende ` QShader ` ungültig ist.

void QShaderBaker::setBatchableVertexShaderExtraInputLocation(int location)

Bei der Generierung einer „ QShader::BatchableVertexShader “-Variante legt „ location “ die Eingabeposition für den eingefügten Vertex-Input fest. Der Wert ist standardmäßig 7 und muss nur dann überschrieben werden, wenn der Vertex-Shader bereits die Eingabeposition 7 verwendet.

void QShaderBaker::setBreakOnShaderTranslationError(bool enable)

Steuert das Verhalten, wenn die Shader-Übersetzung (von SPIR-V nach GLSL/HLSL/MSL) fehlschlägt. Standardmäßig ist diese Einstellung auf „true“ gesetzt, was dazu führt, dass „ bake()“ einen Fehler zurückgibt, wenn ein angeforderter Shader nicht generiert werden kann. Wenn dies nicht gewünscht ist und stattdessen beabsichtigt wird, das zu generieren, was möglich ist, den Rest jedoch stillschweigend zu überspringen, setzen Sie „ enable “ auf „false“.

Die Ausrichtung auf mehrere GLSL-Versionen kann zu Fehlern führen, wenn eine Funktion nicht in eine bestimmte Version übersetzt werden kann. Der Versuch, beispielsweise einen Shader, der `textureSize()` verwendet, nach GLSL ES 100 zu übersetzen, würde den gesamten Aufruf von ` bake()` mit der Fehlermeldung „textureSize wird in ESSL 100 nicht unterstützt“ zum Scheitern bringen. Wenn es akzeptabel ist, keinen GLSL-ES-100-Shader im Ergebnis zu haben, obwohl dieser angefordert wurde, sorgt die Einstellung dieses Flags auf „false“ dafür, dass „ bake()“ erfolgreich ausgeführt wird.

void QShaderBaker::setGeneratedShaderVariants(const QList<QShader::Variant> &v)

Legt fest, welche Shader-Varianten generiert werden. Jede Shader-Version kann mehrere Varianten in der resultierenden Datei „ QShader “ haben.

In den meisten Fällen enthält die Datei „ v “ einen einzigen Eintrag: „ QShader::StandardShader “.

Hinweis: Wenn keine Varianten festgelegt sind, ist die resultierende Datei „ QShader “ leer und somit ungültig.

void QShaderBaker::setGeneratedShaders(const QList<QShaderBaker::GeneratedShader> &v)

Legt fest, welche Art von Shadern kompiliert oder übersetzt werden sollen. Standardmäßig wird nichts generiert, daher ist der Aufruf dieser Funktion vor bake() zwingend erforderlich

Hinweis: Wenn diese Funktion nicht aufgerufen wird oder ` v ` leer ist oder nur ungültige Einträge enthält, ist das resultierende ` QShader ` leer und somit ungültig.

Das minimal mögliche Baking-Ziel ist beispielsweise SPIR-V, ohne zusätzliche Übersetzungen in andere Sprachen. Um dies anzufordern, gehen Sie wie folgt vor:

baker.setGeneratedShaders({ QShader::SpirvShader, QShaderVersion(100) });

Hinweis: „ QShaderBaker “ verarbeitet nur die Zielformate SPIR-V und menschenlesbare Quelltexte. Die weitere Kompilierung in API-spezifische Zwischenformate wie „ QShader::DxbcShader “ oder „ QShader::MetalLibShader “ erfolgt über das Befehlszeilentool „ qsb “ und ist nicht Teil der Laufzeit-API von „ QShaderBaker “.

[since 6.9] void QShaderBaker::setGlslOptions(QShaderBaker::GlslOptions options)

Legt zusätzliche „ options “ für die generierten GLSL- und GLSL ES-Quelldateien fest. Standardmäßig sind keine Flags gesetzt.

Diese Funktion wurde in Qt 6.9 eingeführt.

[since 6.7] void QShaderBaker::setMultiViewCount(int count)

Beim Transpiling von Shadern unter Verwendung von Multiview (z. B. einem Vertex-Shader, der `gl_ViewIndex` für einen Renderer verwendet, der auf `GL_OVR_multiview2`, `VK_KHR_multiview` usw. basiert) ist es bei einigen Zielplattformen erforderlich, die Anzahl der Ansichten im Shader anzugeben. Dies geschieht im GLSL-Code im Vulkan-Stil nicht und ist für Ziele wie SPIR-V oder HLSL nicht relevant, wird jedoch für OpenGL und GLSL benötigt, weshalb der Wert als zusätzliche Metadaten angegeben werden muss.

Standardmäßig ist der Wert 0, wodurch das Einfügen der Anweisung „ num_views “ deaktiviert wird. Die Einstellung 1 ist nicht sinnvoll, da dies ohnehin der Standardwert für „ num_views “ ist. Daher sollte „ count “ ≥ 2 sein, um eine Wirkung zu erzielen. Bei einer Einstellung von beispielsweise 2 enthält der generierte GLSL-Shader eine „ layout(num_views = 2) in; “-Anweisung.

Die Einstellung von „ count “ auf 2 oder höher fügt zudem einige Präprozessor-Anweisungen ein: „ QSHADER_VIEW_COUNT “ wird auf „ count “ gesetzt, während die Erweiterung „ GL_EXT_multiview “ automatisch aktiviert wird. Daher kann die Einstellung des entsprechenden „ count “ auch bei anderen Shader-Typen relevant sein, z. B. wenn ein Uniform-Puffer zwischen dem Vertex- und dem Fragment-Shader gemeinsam genutzt wird und beide Shader in der Lage sein müssen, etwas wie „ #if QSHADER_VIEW_COUNT >= 2 “ zu schreiben.

Diese Funktion wurde in Qt 6.7 eingeführt.

void QShaderBaker::setPerTargetCompilation(bool enable)

Legt die Kompilierung pro Ziel auf „ enable “ fest. Standardmäßig ist diese Option deaktiviert, was bedeutet, dass der Vulkan/GLSL-Quellcode einmal pro Variante zu SPIR-V kompiliert wird. (Also standardmäßig einmal, zweimal, wenn es sich um einen Vertex-Shader handelt und zusätzlich die Variante „Batchable“ wie gewünscht ausgewählt wurde). Das resultierende SPIR-V wird anschließend in die verschiedenen Zielsprachen (GLSL, HLSL, MSL) übersetzt.

Im Ziel-spezifischen Kompilierungsmodus gibt es für jedes Ziel einen separaten Kompilierungsschritt von GLSL nach SPIR-V, d. h. für jede über ` setGeneratedShaders()` angeforderte GLSL-/HLSL-/MSL-Version. Die Eingabequelle ist dieselbe, jedoch werden zielspezifische Präprozessor-Definitionen eingefügt. Dies ist deutlich zeitaufwändiger, ermöglicht es Anwendungen jedoch, einen einzigen Shader bereitzustellen und mithilfe von „ #ifdef “-Blöcken zu differenzieren. Ist dieser Modus deaktiviert, besteht die einzige Möglichkeit, dasselbe zu erreichen, darin, mehrere Versionen der Shader-Datei bereitzustellen, jede separat zu verarbeiten, {.qsb}-Dateien für jede Version auszuliefern und die richtige Datei anhand der Laufzeitlogik auszuwählen.

Die folgenden Makros werden in diesem Modus automatisch definiert. Beachten Sie, dass die Makros immer an Shading-Sprachen gebunden sind, nicht an Grafik-APIs.

  • QSHADER_SPIRV - wird definiert, wenn SPIR-V als Ziel gewählt wird (typischerweise zur Verwendung durch Vulkan).
  • QSHADER_SPIRV_VERSION - Die Nummer der angestrebten SPIR-V-Version, z. B. „ 100 “.
  • QSHADER_GLSL - wird definiert, wenn GLSL oder GLSL ES als Ziel festgelegt ist (in der Regel zur Verwendung durch OpenGL oder OpenGL ES)
  • QSHADER_GLSL_VERSION - Die Zielversionsnummer für GLSL oder GLSL ES, z. B. 100, 300 oder 330.
  • QSHADER_GLSL_ES - Wird nur definiert, wenn GLSL ES als Zielsprache gewählt wird
  • QSHADER_HLSL - wird definiert, wenn HLSL als Zielsprache gewählt wird (wird in der Regel von Direct 3D verwendet)
  • QSHADER_HLSL_VERSION - die angestrebte HLSL-Shader-Modell-Version, z. B. 50
  • QSHADER_MSL - definiert, wenn die Metal Shading Language als Zielsprache gewählt wird (wird in der Regel von Metal verwendet)
  • QSHADER_MSL_VERSION - die angestrebte MSL-Version, z. B. 12 oder 20.

Dies ermöglicht das Schreiben von Shader-Code wie dem folgenden.

#if QSHADER_HLSL || QSHADER_MSL
vec2 uv = vec2(uv_coord.x, 1.0 - uv_coord.y);
#else
vec2 uv = uv_coord;
#endif

Hinweis: Versionsnummern folgen der von GLSL inspirierten Syntax „ QShaderVersion “ und sind daher immer eine einzelne Ganzzahl.

Hinweis: Es gibt nur eine „ QShaderDescription “ pro „ QShader “, unabhängig davon, wie viele einzelne Ziele vorhanden sind. Daher dürfen Elemente von Uniform-Blöcken, Vertex-Eingaben usw. nicht mithilfe der oben beschriebenen Makros bedingt gemacht werden.

Warnung: Beachten Sie die Unterschiede zwischen den Konzepten von Grafik-APIs und Shading-Sprachen. „ QShaderBaker “ und die zugehörigen Tools arbeiten streng nach dem Konzept der Shading-Sprachen und ignorieren, wie die Ergebnisse anschließend verwendet werden. Sollten daher die höheren Schichten im Qt-Grafik-Stack eines Tages beginnen, SPIR-V auch für eine andere API als Vulkan zu verwenden, wird die Annahme, dass QSHADER_SPIRV auf Vulkan hindeutet, nicht mehr gelten.

void QShaderBaker::setPreamble(const QByteArray &preamble)

Legt eine benutzerdefinierte „ preamble “ fest, die vor dem normalen Shader-Code verarbeitet wird.

Dies ist mehr als nur das Voranstellen an die Quellzeichenfolge: Die Gültigkeit der GLSL-Versionsanweisung, die vor allem anderen stehen muss, wird dadurch nicht beeinträchtigt. Auch die Zeilennummern in den ausgegebenen Fehlermeldungen bleiben unverändert, wobei der Inhalt des „ preamble “ ignoriert wird.

Ein Anwendungsfall für Präambeln ist das transparente Einfügen dynamisch generierter „ #define “-Anweisungen.

void QShaderBaker::setSourceDevice(QIODevice *device, QShader::Stage stage, const QString &fileName = QString())

Legt die Quell device fest. Dadurch können beliebige QIODevice anstelle von reinen Dateien verwendet werden. stage gibt die Shader-Stufe an, während der optionale Parameter fileName einen Dateinamen enthält, der in den Fehlermeldungen verwendet wird.

Warnung: Es wird erwartet, dassdevice vertrauenswürdige Inhalte enthält. Anwendungsentwicklern wird empfohlen, die möglichen Auswirkungen sorgfältig abzuwägen, bevor sie vom Benutzer bereitgestellte Daten aus Quellen übergeben, die nicht der Kontrolle der Anwendung unterliegen.

void QShaderBaker::setSourceFileName(const QString &fileName)

Legt den Namen der Shader-Quelldatei auf „ fileName “ fest. Diese Datei wird beim Aufruf von ` bake()` eingelesen. Die Shader-Stufe wird automatisch aus der Dateiendung abgeleitet. Wenn dies nicht gewünscht oder nicht möglich ist, verwenden Sie stattdessen die Überladung mit dem Argument „stage“.

Die unterstützten Dateiendungen sind:

  • .vert - Vertex-Shader
  • .frag - Fragment- (Pixel-)Shader
  • .tesc - Tessellationssteuerungs- (Hull-)Shader
  • .tese - Tessellationsauswertungs- (Domain-)Shader
  • .geom - Geometrie-Shader
  • .comp - Compute-Shader

Warnung: Es wird erwartet, dass„ fileName “ vertrauenswürdige Inhalte enthält. Anwendungsentwicklern wird empfohlen, die möglichen Auswirkungen sorgfältig abzuwägen, bevor sie vom Benutzer bereitgestellte Quelldateien übergeben, die nicht Teil der Anwendung sind.

void QShaderBaker::setSourceFileName(const QString &fileName, QShader::Stage stage)

Legt den Namen der Shader-Quelldatei auf „ fileName “ fest. Diese Datei wird beim Aufruf von „ bake()“ eingelesen. Die Shader-Stufe wird durch „ stage “ festgelegt.

Warnung: Es wird erwartet, dass„ fileName “ vertrauenswürdige Inhalte enthält. Anwendungsentwicklern wird empfohlen, die möglichen Auswirkungen sorgfältig abzuwägen, bevor sie vom Benutzer bereitgestellte Quelldateien übergeben, die nicht Teil der Anwendung sind.

void QShaderBaker::setSourceString(const QByteArray &sourceString, QShader::Stage stage, const QString &fileName = QString())

Legt den Eingabe-Shader „ sourceString “ fest. „ stage “ gibt die Shader-Stufe an, während das optionale „ fileName “ einen Dateinamen enthält, der in den Fehlermeldungen verwendet wird.

Warnung: Es wird erwartet, dass` sourceString ` vertrauenswürdige Inhalte enthält. Anwendungsentwicklern wird empfohlen, die möglichen Auswirkungen sorgfältig abzuwägen, bevor sie vom Benutzer bereitgestellte Daten aus Quellen übergeben, die nicht unter der Kontrolle der Anwendung stehen.

void QShaderBaker::setSpirvOptions(QShaderBaker::SpirvOptions options)

Legt zusätzliche „ options “ für die generierte SPIR-V-Binärdatei fest. Standardmäßig sind keine Flags gesetzt.

void QShaderBaker::setTessellationMode(QShaderDescription::TessellationMode mode)

Bei der Generierung von MSL-Shader-Code für einen Tessellationssteuerungs-Shader muss die Tessellations mode e (Dreiecke oder Vierecke) im Voraus bekannt sein. In GLSL wird dies in der Regel im Tessellationsauswertungs-Shader deklariert, bei Metal muss sie jedoch bereits bei der Generierung des Compute-Shaders aus dem Tessellationssteuerungs-Shader bekannt sein.

Ist dieser Wert nicht festgelegt, gilt als Standard „Dreiecke“.

void QShaderBaker::setTessellationOutputVertexCount(int count)

Bei der Generierung von MSL-Shader-Code für einen Tessellationsauswertungs-Shader muss die Ausgangs-Vertex- count des Tessellationssteuerungs-Shaders im Voraus bekannt sein. In GLSL würde diese typischerweise im Tessellationssteuerungs-Shader deklariert werden, bei Metal muss sie jedoch bereits bei der Generierung des Vertex-Shaders aus dem Tessellationsauswertungs-Shader bekannt sein.

Ist dieser Wert nicht festgelegt, beträgt der Standardwert 3.

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