Auf dieser Seite

Qt3DRender::QShaderProgram Class

class Qt3DRender::QShaderProgram

Kapseln ein Shader-Programm. Mehr...

Header: #include <qshaderprogram.h>
CMake: find_package(Qt6 REQUIRED COMPONENTS 3drender)
target_link_libraries(mytarget PRIVATE Qt6::3drender)
qmake: QT += 3drender
In QML: ShaderProgram
Erbt von: Qt3DCore::QNode
Status: Veraltet

Diese Klasse ist veraltet. Wir raten dringend davon ab, sie in neuem Code zu verwenden.

Öffentliche Typen

enum Format { GLSL, SPIRV }
enum ShaderType { Vertex, Fragment, TessellationControl, TessellationEvaluation, Geometry, Compute }
enum Status { NotReady, Ready, Error }

Eigenschaften

Öffentliche Funktionen

QByteArray computeShaderCode() const
Qt3DRender::QShaderProgram::Format format() const
QByteArray fragmentShaderCode() const
QByteArray geometryShaderCode() const
QString log() const
void setFormat(Qt3DRender::QShaderProgram::Format format)
void setShaderCode(Qt3DRender::QShaderProgram::ShaderType type, const QByteArray &shaderCode)
QByteArray shaderCode(Qt3DRender::QShaderProgram::ShaderType type) const
Qt3DRender::QShaderProgram::Status status() const
QByteArray tessellationControlShaderCode() const
QByteArray tessellationEvaluationShaderCode() const
QByteArray vertexShaderCode() const

Öffentliche Slots

void setComputeShaderCode(const QByteArray &computeShaderCode)
void setFragmentShaderCode(const QByteArray &fragmentShaderCode)
void setGeometryShaderCode(const QByteArray &geometryShaderCode)
void setTessellationControlShaderCode(const QByteArray &tessellationControlShaderCode)
void setTessellationEvaluationShaderCode(const QByteArray &tessellationEvaluationShaderCode)
void setVertexShaderCode(const QByteArray &vertexShaderCode)

Signale

void computeShaderCodeChanged(const QByteArray &computeShaderCode)
void formatChanged(Qt3DRender::QShaderProgram::Format format)
void fragmentShaderCodeChanged(const QByteArray &fragmentShaderCode)
void geometryShaderCodeChanged(const QByteArray &geometryShaderCode)
void logChanged(const QString &log)
void statusChanged(Qt3DRender::QShaderProgram::Status status)
void tessellationControlShaderCodeChanged(const QByteArray &tessellationControlShaderCode)
void tessellationEvaluationShaderCodeChanged(const QByteArray &tessellationEvaluationShaderCode)
void vertexShaderCodeChanged(const QByteArray &vertexShaderCode)

Statische öffentliche Mitglieder

QByteArray loadSource(const QUrl &sourceUrl)

Ausführliche Beschreibung

Ein Shader-Programm besteht aus mehreren verschiedenen Shadern, wie z. B. Vertex- und Fragment-Shadern.

Qt3D füllt automatisch eine Reihe von Standard-Uniforms aus, wenn diese während der Shader-Introspektionsphase gefunden werden.

Standard-UniformZugehöriger Qt3D-ParameternameGLSL-Deklaration
ModelMatrixmodelMatrixuniform mat4 modelMatrix;
ViewMatrixviewMatrixuniform mat4 viewMatrix;
ProjektionsmatrixprojectionMatrixuniform mat4 Projektionsmatrix;
ModelViewMatrixmodelViewuniform mat4 modelView;
ViewProjectionMatrixviewProjectionMatrixuniform mat4 viewProjectionMatrix;
ModelViewProjectionMatrixmodelViewProjection
mvp
uniform mat4 modelViewProjection;
uniform mat4 mvp;
InverseModelMatrixinverseModelMatrixuniform mat4 inverseModelMatrix;
InverseViewMatrixinverseViewMatrixuniform mat4 inverseViewMatrix;
InverseProjektionsmatrixinverseProjectionMatrixuniform mat4 inverseProjectionMatrix;
InverseModelViewMatrixinverseModelViewuniform mat4 inverseModelView;
InverseViewProjectionMatrixinverseViewProjectionMatrixuniform mat4 inverseViewProjectionMatrix;
InverseModelViewProjectionMatrixinverseModelViewProjectionuniform mat4 inverseModelViewProjection;
Modell-NormalenmatrixmodelNormalMatrixuniform mat3 modelNormalMatrix;
Modell-Ansicht-NormalenmatrixmodelViewNormaluniform mat3 modelViewNormal;
ViewportMatrixviewportMatrixuniform mat4 viewportMatrix;
InverseViewportMatrixinverseViewportMatrixuniform mat4 inverseViewportMatrix;
AspectRatio
(Oberflächenbreite / Oberflächenhöhe)
aspectRatiouniform float aspectRatio;
BelichtungBelichtunguniform float Belichtung;
GammaGammagleichmäßige Gamma-Belichtung mit Gleitkomma;
Zeit
(in Nanosekunden)
Zeituniform float time;
AugenpositionAugenpositionuniform vec3 eyePosition;
SkinningPaletteskinningPalette[0]const int maxJoints = 100;
uniform mat4 skinningPalette[maxJoints];

RHI-Unterstützung

Beim Schreiben von GLSL-450-Shader-Code zur Verwendung mit dem RHI-Backend von „ Qt 3D “ werden die Standard-Uniforms als zwei Uniform-Buffer-Objekte bereitgestellt.

Die Bindungspositionen hierfür sind auf Bindung 0 für RenderView-Uniforms und auf Bindung 1 für Command-Uniforms festgelegt.

#version 450 core

layout(location = 0) in vec3 vertexPosition;

layout(std140, binding = 0) uniform qt3d_render_view_uniforms {
  mat4 viewMatrix;
  mat4 projectionMatrix;
  mat4 uncorrectedProjectionMatrix;
  mat4 clipCorrectionMatrix;
  mat4 viewProjectionMatrix;
  mat4 inverseViewMatrix;
  mat4 inverseProjectionMatrix;
  mat4 inverseViewProjectionMatrix;
  mat4 viewportMatrix;
  mat4 inverseViewportMatrix;
  vec4 textureTransformMatrix;
  vec3 eyePosition;
  float aspectRatio;
  float gamma;
  float exposure;
  float time;
  float yUpInNDC;
  float yUpInFBO;
};

layout(std140, binding = 1) uniform qt3d_command_uniforms {
  mat4 modelMatrix;
  mat4 inverseModelMatrix;
  mat4 modelViewMatrix;
  mat3 modelNormalMatrix;
  mat4 inverseModelViewMatrix;
  mat4 modelViewProjection;
  mat4 inverseModelViewProjectionMatrix;
};

void main()
{
    gl_Position = (projectionMatrix * viewMatrix * modelMatrix * vertexPosition);
}

Verwenden Sie für benutzerdefinierte Uniform-Buffer-Objekte eine Bindung ab 2 oder „auto“, damit „ Qt 3D “ die Bindung automatisch ermittelt. Achten Sie darauf, die Konsistenz zwischen den verschiedenen Shader-Stufen zu wahren.

#version 450 core

layout(std140, binding = auto) uniform my_uniforms {
  vec4 myColor;
};

layout(location=0) out vec4 fragColor;

void main()
{
    fragColor = myColor;
}

Bei der Übergabe von Werten an Uniforms gibt es keine Änderungen.

Im obigen Beispiel könnte die Einstellung von „myColor“ wie folgt erfolgen:

QParameter *parameter = new QParameter();
parameter->setName("myColor");
parameter->setValue(QVariant::fromValue(QColor(Qt::blue)));

Texturen müssen weiterhin als eigenständige Uniforms definiert werden.

#version 450 core

layout(binding=0) uniform sampler2D source;

layout(location=0) out vec4 fragColor;

void main()
{
    fragColor = texture(source, vec2(0.5, 0.5));
}

Dokumentation zu Mitgliedstypen

enum QShaderProgram::Format

Diese Enumeration gibt das Format des verwendeten Shader-Codes an.

KonstanteWertBeschreibung
Qt3DRender::QShaderProgram::GLSL0OpenGL
Qt3DRender::QShaderProgram::SPIRV1Vulkan, OpenGL 5

enum QShaderProgram::ShaderType

Diese Enumeration gibt den Typ des verwendeten Shaders an.

KonstanteWertBeschreibung
Qt3DRender::QShaderProgram::Vertex0Vertex-Shader
Qt3DRender::QShaderProgram::Fragment1Fragment-Shader
Qt3DRender::QShaderProgram::TessellationControl2Tessellationssteuerungs-Shader
Qt3DRender::QShaderProgram::TessellationEvaluation3Tessellationsauswertungs-Shader
Qt3DRender::QShaderProgram::Geometry4Geometrie-Shader
Qt3DRender::QShaderProgram::Compute5Compute-Shader

enum QShaderProgram::Status

Diese Enumeration gibt den Status des verwendeten Shaders an.

KonstanteWertBeschreibung
Qt3DRender::QShaderProgram::NotReady0Der Shader wurde noch nicht kompiliert und verknüpft
Qt3DRender::QShaderProgram::Ready1Der Shader wurde erfolgreich kompiliert
Qt3DRender::QShaderProgram::Error2Beim Kompilieren des Shaders ist ein Fehler aufgetreten

Dokumentation zur Eigenschaft

computeShaderCode : QByteArray

Enthält den Compute-Shader-Code, der von diesem Shader-Programm verwendet wird.

Zugriffsfunktionen:

QByteArray computeShaderCode() const
void setComputeShaderCode(const QByteArray &computeShaderCode)

Notifier-Signal:

void computeShaderCodeChanged(const QByteArray &computeShaderCode)

format : Format

Enthält das Format des im ShaderProgram angegebenen Codes. Der Standardwert ist ShaderProgram.GLSL

Zugriffsfunktionen:

Qt3DRender::QShaderProgram::Format format() const
void setFormat(Qt3DRender::QShaderProgram::Format format)

Notifier-Signal:

void formatChanged(Qt3DRender::QShaderProgram::Format format)

fragmentShaderCode : QByteArray

Enthält den Fragment-Shader-Code, der von diesem Shader-Programm verwendet wird.

Zugriffsfunktionen:

QByteArray fragmentShaderCode() const
void setFragmentShaderCode(const QByteArray &fragmentShaderCode)

Notifier-Signal:

void fragmentShaderCodeChanged(const QByteArray &fragmentShaderCode)

geometryShaderCode : QByteArray

Enthält den Geometrie-Shader-Code, der von diesem Shader-Programm verwendet wird.

Zugriffsfunktionen:

QByteArray geometryShaderCode() const
void setGeometryShaderCode(const QByteArray &geometryShaderCode)

Notifier-Signal:

void geometryShaderCodeChanged(const QByteArray &geometryShaderCode)

[read-only] log : QString

Enthält das Protokoll des aktuellen Shader-Programms. Dies ist hilfreich, um einen Kompilierungsfehler des Shader-Programms zu diagnostizieren.

Zugriffsfunktionen:

QString log() const

Notifier-Signal:

void logChanged(const QString &log)

[read-only] status : Status

Enthält den Status des aktuellen Shader-Programms.

Zugriffsfunktionen:

Qt3DRender::QShaderProgram::Status status() const

Notifier-Signal:

void statusChanged(Qt3DRender::QShaderProgram::Status status)

tessellationControlShaderCode : QByteArray

Enthält den Code des Tesselations-Steuerungs-Shaders, der von diesem Shader-Programm verwendet wird.

Zugriffsfunktionen:

QByteArray tessellationControlShaderCode() const
void setTessellationControlShaderCode(const QByteArray &tessellationControlShaderCode)

Notifier-Signal:

void tessellationControlShaderCodeChanged(const QByteArray &tessellationControlShaderCode)

tessellationEvaluationShaderCode : QByteArray

Enthält den Shader-Code zur Tessellationsauswertung, der von diesem Shader-Programm verwendet wird.

Zugriffsfunktionen:

QByteArray tessellationEvaluationShaderCode() const
void setTessellationEvaluationShaderCode(const QByteArray &tessellationEvaluationShaderCode)

Notifier-Signal:

void tessellationEvaluationShaderCodeChanged(const QByteArray &tessellationEvaluationShaderCode)

vertexShaderCode : QByteArray

Enthält den Vertex-Shader-Code, der von diesem Shader-Programm verwendet wird.

Zugriffsfunktionen:

QByteArray vertexShaderCode() const
void setVertexShaderCode(const QByteArray &vertexShaderCode)

Notifier-Signal:

void vertexShaderCodeChanged(const QByteArray &vertexShaderCode)

Dokumentation der Member-Funktionen

[static invokable] QByteArray QShaderProgram::loadSource(const QUrl &sourceUrl)

Gibt den von sourceUrl geladenen Shader-Code zurück.

Hinweis: Diese Funktion kann über das Metaobjektsystem und aus QML aufgerufen werden. Siehe Q_INVOKABLE.

void QShaderProgram::setShaderCode(Qt3DRender::QShaderProgram::ShaderType type, const QByteArray &shaderCode)

Legt den Shader-Code für „ type “ des Shaders auf „ shaderCode “ fest.

Siehe auch „ shaderCode()“.

QByteArray QShaderProgram::shaderCode(Qt3DRender::QShaderProgram::ShaderType type) const

Gibt den Shader-Code für „ type “ zurück.

Siehe auch setShaderCode().

Qt3DRender::QShaderProgram::Status QShaderProgram::status() const

Gibt den Status des aktuellen Shader-Programms zurück.

Hinweis: Getter -Funktion für die Eigenschaft „status“.

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