Qt3DRender::QShaderProgram Class
class Qt3DRender::QShaderProgramEncapsule un programme de shader. En savoir plus...
| En-tête : | #include <qshaderprogram.h> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS 3drender) target_link_libraries(mytarget PRIVATE Qt6::3drender) |
| qmake : | QT += 3drender |
| En QML : | ShaderProgram |
| Hérite de : | Qt3DCore::QNode |
| Statut : | Obsolète |
Cette classe est obsolète. Nous déconseillons fortement de l'utiliser dans du nouveau code.
Types publics
| enum | Format { GLSL, SPIRV } |
| enum | ShaderType { Vertex, Fragment, TessellationControl, TessellationEvaluation, Geometry, Compute } |
| enum | Status { NotReady, Ready, Error } |
Propriétés
|
|
Fonctions publiques
| 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 |
Emplacements publics
| 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) |
Signaux
| 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) |
Membres publics statiques
| QByteArray | loadSource(const QUrl &sourceUrl) |
Description détaillée
Un programme de shaders se compose de plusieurs shaders différents, tels que les shaders de sommets et de fragments.
Qt3D remplira automatiquement un ensemble d’uniformes par défaut s’il en rencontre lors de la phase d’introspection du shader.
| Uniforme par défaut | Nom du paramètre Qt3D associé | Déclaration GLSL |
|---|---|---|
| ModelMatrix | modelMatrix | uniform mat4 modelMatrix; |
| ViewMatrix | viewMatrix | uniform mat4 viewMatrix; |
| Matrice de projection | projectionMatrix | uniform mat4 projectionMatrix; |
| Matrice de vue du modèle | modelView | uniform mat4 modelView; |
| Matrice de projection de la vue | matrice de projection de la vue | uniform mat4 viewProjectionMatrix; |
| Matrice de projection modèle-vue | modelViewProjection mvp | uniform mat4 modelViewProjection; uniform mat4 mvp; |
| Matrice inverse du modèle | inverseModelMatrix | uniform mat4 inverseModelMatrix; |
| Matrice de vue inverse | inverseViewMatrix | uniform mat4 inverseViewMatrix; |
| Matrice de projection inverse | matrice de projection inverse | uniform mat4 inverseProjectionMatrix; |
| Matrice inverse de la vue du modèle | inverseModelView | uniform mat4 inverseModelView; |
| Matrice de projection inverse de la vue | matrice inverse de projection vue | uniform mat4 inverseViewProjectionMatrix; |
| Matrice de projection inverse du modèle et de la vue | inverseModelViewProjection | uniform mat4 inverseModelViewProjection; |
| Matrice normale du modèle | modelNormalMatrix | uniform mat3 matriceNormaleDuModèle; |
| Matrice de normales de vue du modèle | modelViewNormal | uniform mat3 modelViewNormal; |
| ViewportMatrix | viewportMatrix | uniform mat4 viewportMatrix; |
| Matrice inverse de la fenêtre de visualisation | inverseViewportMatrix | uniform mat4 inverseViewportMatrix; |
du rapport d'aspect (largeur de la surface / hauteur de la surface) | aspectRatio | uniform float aspectRatio; |
| Exposition | exposure | uniform float exposure; |
| Gamma | gamma | gamma uniforme en nombre flottant ; |
temporelle (en nanosecondes) | temps | uniform float time; |
| EyePosition | eyePosition | uniform vec3 eyePosition; |
| SkinningPalette | skinningPalette[0] | const int maxJoints = 100; uniform mat4 skinningPalette[maxJoints]; |
Prise en charge de RHI
Lors de l'écriture de code de shader GLSL 450 destiné à être utilisé avec le backend RHI d'Qt 3D, les uniformes par défaut seront fournis sous la forme de 2 objets de tampon uniform.
Leurs emplacements de liaison sont définis sur 0 pour les uniformes RenderView et sur 1 pour les uniformes Command.
#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);
}Pour les objets de tampon uniformes définis par l’utilisateur, utilisez une liaison commençant à 2 ou « auto » pour laisser Qt 3D déterminer automatiquement la liaison. Veillez à maintenir la cohérence entre les différentes étapes du shader.
#version 450 core
layout(std140, binding = auto) uniform my_uniforms {
vec4 myColor;
};
layout(location=0) out vec4 fragColor;
void main()
{
fragColor = myColor;
}Il n'y a aucun changement à apporter en ce qui concerne la transmission de valeurs aux uniformes.
Pour l’exemple ci-dessus, la définition de myColor pourrait se faire ainsi :
QParameter *parameter = new QParameter();
parameter->setName("myColor");
parameter->setValue(QVariant::fromValue(QColor(Qt::blue)));Les textures doivent toujours être définies en tant qu’uniformes autonomes.
#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));
}Documentation sur les types de membres
enum QShaderProgram::Format
Cette énumération identifie le format du code de shader utilisé.
| Constante | Valeur | Description |
|---|---|---|
Qt3DRender::QShaderProgram::GLSL | 0 | OpenGL |
Qt3DRender::QShaderProgram::SPIRV | 1 | Vulkan, OpenGL 5 |
enum QShaderProgram::ShaderType
Cette énumération identifie le type de shader utilisé.
| Constante | Valeur | Description |
|---|---|---|
Qt3DRender::QShaderProgram::Vertex | 0 | Shader de sommet |
Qt3DRender::QShaderProgram::Fragment | 1 | Shader de fragment |
Qt3DRender::QShaderProgram::TessellationControl | 2 | Shader de contrôle de tessellation |
Qt3DRender::QShaderProgram::TessellationEvaluation | 3 | Shader d'évaluation de la tessellation |
Qt3DRender::QShaderProgram::Geometry | 4 | Shader de géométrie |
Qt3DRender::QShaderProgram::Compute | 5 | Shader de calcul |
enum QShaderProgram::Status
Cette énumération identifie l'état du shader utilisé.
| Constante | Valeur | Description |
|---|---|---|
Qt3DRender::QShaderProgram::NotReady | 0 | Le shader n'a pas encore été compilé ni lié |
Qt3DRender::QShaderProgram::Ready | 1 | Le shader a été compilé avec succès |
Qt3DRender::QShaderProgram::Error | 2 | Une erreur s'est produite lors de la compilation du shader |
Documentation sur les propriétés
computeShaderCode : QByteArray
Contient le code du shader de calcul utilisé par ce programme de shader.
Fonctions d'accès :
| QByteArray | computeShaderCode() const |
| void | setComputeShaderCode(const QByteArray &computeShaderCode) |
Signal de notification :
| void | computeShaderCodeChanged(const QByteArray &computeShaderCode) |
format : Format
Contient le format du code fourni dans ShaderProgram. La valeur par défaut est ShaderProgram.GLSL
Fonctions d'accès :
| Qt3DRender::QShaderProgram::Format | format() const |
| void | setFormat(Qt3DRender::QShaderProgram::Format format) |
Signal de notification :
| void | formatChanged(Qt3DRender::QShaderProgram::Format format) |
fragmentShaderCode : QByteArray
Contient le code du shader de fragment utilisé par ce programme de shader.
Fonctions d'accès :
| QByteArray | fragmentShaderCode() const |
| void | setFragmentShaderCode(const QByteArray &fragmentShaderCode) |
Signal de notification :
| void | fragmentShaderCodeChanged(const QByteArray &fragmentShaderCode) |
geometryShaderCode : QByteArray
Contient le code du shader géométrique utilisé par ce programme de shader.
Fonctions d'accès :
| QByteArray | geometryShaderCode() const |
| void | setGeometryShaderCode(const QByteArray &geometryShaderCode) |
Signal de notification :
| void | geometryShaderCodeChanged(const QByteArray &geometryShaderCode) |
[read-only] log : QString
Contient le journal du programme de shader actuel. Cela s'avère utile pour diagnostiquer un échec de compilation du programme de shader.
Fonctions d'accès :
| QString | log() const |
Signal de notification :
| void | logChanged(const QString &log) |
[read-only] status : Status
Contient l'état du programme de shader actuel.
Fonctions d'accès :
| Qt3DRender::QShaderProgram::Status | status() const |
Signal de notification :
| void | statusChanged(Qt3DRender::QShaderProgram::Status status) |
tessellationControlShaderCode : QByteArray
Contient le code du shader de contrôle de tessellation utilisé par ce programme de shader.
Fonctions d'accès :
| QByteArray | tessellationControlShaderCode() const |
| void | setTessellationControlShaderCode(const QByteArray &tessellationControlShaderCode) |
Signal de notification :
| void | tessellationControlShaderCodeChanged(const QByteArray &tessellationControlShaderCode) |
tessellationEvaluationShaderCode : QByteArray
Contient le code du shader d'évaluation de la tessellation utilisé par ce programme de shader.
Fonctions d’accès :
| QByteArray | tessellationEvaluationShaderCode() const |
| void | setTessellationEvaluationShaderCode(const QByteArray &tessellationEvaluationShaderCode) |
Signal de notification :
| void | tessellationEvaluationShaderCodeChanged(const QByteArray &tessellationEvaluationShaderCode) |
vertexShaderCode : QByteArray
Contient le code du shader de sommets utilisé par ce programme de shader.
Fonctions d’accès :
| QByteArray | vertexShaderCode() const |
| void | setVertexShaderCode(const QByteArray &vertexShaderCode) |
Signal de notification :
| void | vertexShaderCodeChanged(const QByteArray &vertexShaderCode) |
Documentation des fonctions membres
[static invokable] QByteArray QShaderProgram::loadSource(const QUrl &sourceUrl)
Renvoie le code du shader chargé depuis sourceUrl.
Remarque : cette fonction peut être appelée via le système de méta-objets et depuis QML. Voir Q_INVOKABLE.
void QShaderProgram::setShaderCode(Qt3DRender::QShaderProgram::ShaderType type, const QByteArray &shaderCode)
Définit le code du shader pour la fonction « type » du shader sur la valeur « shaderCode ».
Voir également shaderCode().
QByteArray QShaderProgram::shaderCode(Qt3DRender::QShaderProgram::ShaderType type) const
Renvoie le code du shader correspondant à type.
Voir également setShaderCode().
Qt3DRender::QShaderProgram::Status QShaderProgram::status() const
Renvoie l'état du programme de shader actuel.
Remarque : fonctiongetter pour la propriété 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.