Qt3DRender::QShaderProgram Class
class Qt3DRender::QShaderProgramKapseln 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-Uniform | Zugehöriger Qt3D-Parametername | GLSL-Deklaration |
|---|---|---|
| ModelMatrix | modelMatrix | uniform mat4 modelMatrix; |
| ViewMatrix | viewMatrix | uniform mat4 viewMatrix; |
| Projektionsmatrix | projectionMatrix | uniform mat4 Projektionsmatrix; |
| ModelViewMatrix | modelView | uniform mat4 modelView; |
| ViewProjectionMatrix | viewProjectionMatrix | uniform mat4 viewProjectionMatrix; |
| ModelViewProjectionMatrix | modelViewProjection mvp | uniform mat4 modelViewProjection; uniform mat4 mvp; |
| InverseModelMatrix | inverseModelMatrix | uniform mat4 inverseModelMatrix; |
| InverseViewMatrix | inverseViewMatrix | uniform mat4 inverseViewMatrix; |
| InverseProjektionsmatrix | inverseProjectionMatrix | uniform mat4 inverseProjectionMatrix; |
| InverseModelViewMatrix | inverseModelView | uniform mat4 inverseModelView; |
| InverseViewProjectionMatrix | inverseViewProjectionMatrix | uniform mat4 inverseViewProjectionMatrix; |
| InverseModelViewProjectionMatrix | inverseModelViewProjection | uniform mat4 inverseModelViewProjection; |
| Modell-Normalenmatrix | modelNormalMatrix | uniform mat3 modelNormalMatrix; |
| Modell-Ansicht-Normalenmatrix | modelViewNormal | uniform mat3 modelViewNormal; |
| ViewportMatrix | viewportMatrix | uniform mat4 viewportMatrix; |
| InverseViewportMatrix | inverseViewportMatrix | uniform mat4 inverseViewportMatrix; |
| AspectRatio (Oberflächenbreite / Oberflächenhöhe) | aspectRatio | uniform float aspectRatio; |
| Belichtung | Belichtung | uniform float Belichtung; |
| Gamma | Gamma | gleichmäßige Gamma-Belichtung mit Gleitkomma; |
| Zeit (in Nanosekunden) | Zeit | uniform float time; |
| Augenposition | Augenposition | uniform vec3 eyePosition; |
| SkinningPalette | skinningPalette[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.
| Konstante | Wert | Beschreibung |
|---|---|---|
Qt3DRender::QShaderProgram::GLSL | 0 | OpenGL |
Qt3DRender::QShaderProgram::SPIRV | 1 | Vulkan, OpenGL 5 |
enum QShaderProgram::ShaderType
Diese Enumeration gibt den Typ des verwendeten Shaders an.
| Konstante | Wert | Beschreibung |
|---|---|---|
Qt3DRender::QShaderProgram::Vertex | 0 | Vertex-Shader |
Qt3DRender::QShaderProgram::Fragment | 1 | Fragment-Shader |
Qt3DRender::QShaderProgram::TessellationControl | 2 | Tessellationssteuerungs-Shader |
Qt3DRender::QShaderProgram::TessellationEvaluation | 3 | Tessellationsauswertungs-Shader |
Qt3DRender::QShaderProgram::Geometry | 4 | Geometrie-Shader |
Qt3DRender::QShaderProgram::Compute | 5 | Compute-Shader |
enum QShaderProgram::Status
Diese Enumeration gibt den Status des verwendeten Shaders an.
| Konstante | Wert | Beschreibung |
|---|---|---|
Qt3DRender::QShaderProgram::NotReady | 0 | Der Shader wurde noch nicht kompiliert und verknüpft |
Qt3DRender::QShaderProgram::Ready | 1 | Der Shader wurde erfolgreich kompiliert |
Qt3DRender::QShaderProgram::Error | 2 | Beim 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.