Class ShaderProgram

Class Hierarchy

ShaderProgram defines programmable vertex and fragment operations done by the GPU for a draw call.

For each draw call, graphics device executes a vertex shader for each vertex, rasterizes primitives, and for each rasterized fragment, the fragment shader is executed.

In order to create a ShaderProgram, you must prepare ShaderProgram::CreateInfo structure and make sure it is valid using CreateInfo::validate(), then create the ShaderProgram with ShaderProgram::create(). If ShaderProgram creation parameters are not valid, ShaderProgram::create() will throw an exception, which can stop program execution.

See also
See also
See also
See also

ShaderProgram consist of vertex shader, fragment shader, specification of vertex attributes consumed by the vertex shader, and specification of property types that are used to control uniforms,

Shader programs consume per vertex attribute data, and per draw call values known as uniforms.

Vertex attribute data is typically sourced from Meshes. Kanzi Shader lists a number of shader vertex attributes. Shader vertex attributes have name, semantic and semantic type. When Kanzi prepares a draw call, a mesh is typically used as source for attribute data that is consumed by the shader program. Each mesh has a number of mesh vertex attributes; these are mapped to shader vertex attributes based on attribute semantic and semantic index.

Uniforms are typically sourced from properties, for example Material properties, or from engine. Engine uniforms are for example final transform for the current Model3D node being drawn, camera transformation, or positions and colors of lights in the scene. Engine uniforms are also called "fixed uniforms" in Kanzi.

Values of uniforms can be transformed by Kanzi before they are sent to shader program. Currently only color uniforms have transformations available. With linear to sRGB transform, a linear color is convertex to sRGB when it is sent to uniform. With sRGB to linear transform, a sRGB color value is transformed to linear when it is sent to uniform.

Inherits properties and message types from ShaderProgramMetadata.