- class QShaderProgram#
Encapsulates a Shader Program. More…
Synopsis#
Properties#
Methods#
def
__init__()
def
format()
def
log()
def
setFormat()
def
setShaderCode()
def
shaderCode()
def
status()
Slots#
Signals#
Static functions#
def
loadSource()
Note
This documentation may contain snippets that were automatically translated from C++ to Python. We always welcome contributions to the snippet translation. If you see an issue with the translation, you can also let us know by creating a ticket on https:/bugreports.qt.io/projects/PYSIDE
Detailed Description#
A shader program consists of several different shaders, such as vertex and fragment shaders.
Qt3D will automatically populate a set of default uniforms if they are encountered during the shader instrospection phase.
Default Uniform
Associated Qt3D Parameter name
GLSL declaration
ModelMatrix
modelMatrix
uniform mat4 modelMatrix;
ViewMatrix
viewMatrix
uniform mat4 viewMatrix;
ProjectionMatrix
projectionMatrix
uniform mat4 projectionMatrix;
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;
InverseProjectionMatrix
inverseProjectionMatrix
uniform mat4 inverseProjectionMatrix;
InverseModelViewMatrix
inverseModelView
uniform mat4 inverseModelView;
InverseViewProjectionMatrix
inverseViewProjectionMatrix
uniform mat4 inverseViewProjectionMatrix;
InverseModelViewProjectionMatrix
inverseModelViewProjection
uniform mat4 inverseModelViewProjection;
ModelNormalMatrix
modelNormalMatrix
uniform mat3 modelNormalMatrix;
ModelViewNormalMatrix
modelViewNormal
uniform mat3 modelViewNormal;
ViewportMatrix
viewportMatrix
uniform mat4 viewportMatrix;
InverseViewportMatrix
inverseViewportMatrix
uniform mat4 inverseViewportMatrix;
AspectRatio (surface width / surface height)
aspectRatio
uniform float aspectRatio;
Exposure
exposure
uniform float exposure;
Gamma
gamma
uniform float gamma;
Time (in nano seconds)
time
uniform float time;
EyePosition
eyePosition
uniform vec3 eyePosition;
SkinningPalette
skinningPalette[0]
const int maxJoints = 100; uniform mat4 skinningPalette[maxJoints];
RHI Support#
When writing GLSL 450 shader code to use with Qt 3D’s RHI backend, the default uniforms will be provided as 2 uniform buffer objects.
The binding locations for these is set to bindings 0 for RenderView uniforms and 1 for Command uniforms.
#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); }
For user defined uniform buffer object, use binding starting at 2 or auto to let Qt 3D work out the binding automatically. Make sure to remain consistent between the different shader stages.
#version 450 core layout(std140, binding = auto) uniform my_uniforms { vec4 myColor; }; layout(location=0) out vec4 fragColor; void main() { fragColor = myColor; }
There is no change involved when it comes to feeding values to uniforms.
For the above example, setting myColor could be done with:
QParameter *parameter = new QParameter(); parameter->setName("myColor"); parameter->setValue(QVariant::fromValue(QColor(Qt::blue)));
Textures still have to be defined as standalone uniforms.
#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)); }
- class ShaderType#
This enum identifies the type of shader used.
Constant
Description
Qt3DRender.QShaderProgram.Vertex
Vertex shader
Qt3DRender.QShaderProgram.Fragment
Fragment shader
Qt3DRender.QShaderProgram.TessellationControl
Tesselation control shader
Qt3DRender.QShaderProgram.TessellationEvaluation
Tesselation evaluation shader
Qt3DRender.QShaderProgram.Geometry
Geometry shader
Qt3DRender.QShaderProgram.Compute
Compute shader
- class Status#
This enum identifies the status of shader used.
Constant
Description
Qt3DRender.QShaderProgram.NotReady
The shader hasn’t been compiled and linked yet
Qt3DRender.QShaderProgram.Ready
The shader was successfully compiled
Qt3DRender.QShaderProgram.Error
An error occurred while compiling the shader
- class Format#
This enum identifies the format of the shader code used.
Constant
Description
Qt3DRender.QShaderProgram.GLSL
OpenGL
Qt3DRender.QShaderProgram.SPIRV
Vulkan, OpenGL 5
Note
Properties can be used directly when
from __feature__ import true_property
is used or via accessor functions otherwise.- property computeShaderCodeᅟ: QByteArray#
Holds the compute shader code used by this shader program.
- Access functions:
- property formatᅟ: Qt3DRender.QShaderProgram.Format#
Holds the format of the code provided on the ShaderProgram . The default is ShaderProgram .GLSL
- Access functions:
Signal
formatChanged()
- property fragmentShaderCodeᅟ: QByteArray#
Holds the fragment shader code used by this shader program.
- Access functions:
- property geometryShaderCodeᅟ: QByteArray#
Holds the geometry shader code used by this shader program.
- Access functions:
- property logᅟ: str#
Holds the log of the current shader program. This is useful to diagnose a compilation failure of the shader program.
- Access functions:
Signal
logChanged()
- property statusᅟ: Qt3DRender.QShaderProgram.Status#
Holds the status of the current shader program.
- Access functions:
Signal
statusChanged()
- property tessellationControlShaderCodeᅟ: QByteArray#
Holds the tesselation control shader code used by this shader program.
- Access functions:
- property tessellationEvaluationShaderCodeᅟ: QByteArray#
Holds the tesselation evaluation shader code used by this shader program.
- Access functions:
- property vertexShaderCodeᅟ: QByteArray#
Holds the vertex shader code used by this shader program.
- Access functions:
- __init__([parent=None])#
- Parameters:
parent –
QNode
- computeShaderCode()#
- Return type:
See also
setComputeShaderCode()
Getter of property
computeShaderCodeᅟ
.- computeShaderCodeChanged(computeShaderCode)#
- Parameters:
computeShaderCode –
QByteArray
Notification signal of property
computeShaderCodeᅟ
.- format()#
- Return type:
Format
See also
setFormat()
Getter of property
formatᅟ
.- formatChanged(format)#
- Parameters:
format –
Format
Notification signal of property
formatᅟ
.- fragmentShaderCode()#
- Return type:
See also
setFragmentShaderCode()
Getter of property
fragmentShaderCodeᅟ
.- fragmentShaderCodeChanged(fragmentShaderCode)#
- Parameters:
fragmentShaderCode –
QByteArray
Notification signal of property
fragmentShaderCodeᅟ
.- geometryShaderCode()#
- Return type:
See also
setGeometryShaderCode()
Getter of property
geometryShaderCodeᅟ
.- geometryShaderCodeChanged(geometryShaderCode)#
- Parameters:
geometryShaderCode –
QByteArray
Notification signal of property
geometryShaderCodeᅟ
.Returns the shader code loaded from
sourceUrl
.- log()#
- Return type:
str
Getter of property
logᅟ
.- logChanged(log)#
- Parameters:
log – str
Notification signal of property
logᅟ
.- setComputeShaderCode(computeShaderCode)#
- Parameters:
computeShaderCode –
QByteArray
See also
computeShaderCode()
Setter of property
computeShaderCodeᅟ
.- setFormat(format)#
- Parameters:
format –
Format
See also
format()
Setter of property
formatᅟ
.- setFragmentShaderCode(fragmentShaderCode)#
- Parameters:
fragmentShaderCode –
QByteArray
See also
fragmentShaderCode()
Setter of property
fragmentShaderCodeᅟ
.- setGeometryShaderCode(geometryShaderCode)#
- Parameters:
geometryShaderCode –
QByteArray
See also
geometryShaderCode()
Setter of property
geometryShaderCodeᅟ
.- setShaderCode(type, shaderCode)#
- Parameters:
type –
ShaderType
shaderCode –
QByteArray
Sets the shader code for
type
of shader to theshaderCode
.See also
shaderCode()
- setTessellationControlShaderCode(tessellationControlShaderCode)#
- Parameters:
tessellationControlShaderCode –
QByteArray
See also
tessellationControlShaderCode()
Setter of property
tessellationControlShaderCodeᅟ
.- setTessellationEvaluationShaderCode(tessellationEvaluationShaderCode)#
- Parameters:
tessellationEvaluationShaderCode –
QByteArray
See also
tessellationEvaluationShaderCode()
Setter of property
tessellationEvaluationShaderCodeᅟ
.- setVertexShaderCode(vertexShaderCode)#
- Parameters:
vertexShaderCode –
QByteArray
See also
vertexShaderCode()
Setter of property
vertexShaderCodeᅟ
.- shaderCode(type)#
- Parameters:
type –
ShaderType
- Return type:
Returns the shader code for
type
.See also
setShaderCode()
- status()#
- Return type:
Status
Returns the status of the current shader program.
Getter of property
statusᅟ
.- statusChanged(status)#
- Parameters:
status –
Status
Notification signal of property
statusᅟ
.- tessellationControlShaderCode()#
- Return type:
See also
setTessellationControlShaderCode()
Getter of property
tessellationControlShaderCodeᅟ
.- tessellationControlShaderCodeChanged(tessellationControlShaderCode)#
- Parameters:
tessellationControlShaderCode –
QByteArray
Notification signal of property
tessellationControlShaderCodeᅟ
.- tessellationEvaluationShaderCode()#
- Return type:
See also
setTessellationEvaluationShaderCode()
Getter of property
tessellationEvaluationShaderCodeᅟ
.- tessellationEvaluationShaderCodeChanged(tessellationEvaluationShaderCode)#
- Parameters:
tessellationEvaluationShaderCode –
QByteArray
Notification signal of property
tessellationEvaluationShaderCodeᅟ
.- vertexShaderCode()#
- Return type:
See also
setVertexShaderCode()
Getter of property
vertexShaderCodeᅟ
.- vertexShaderCodeChanged(vertexShaderCode)#
- Parameters:
vertexShaderCode –
QByteArray
Notification signal of property
vertexShaderCodeᅟ
.