kanzi::ShaderProgram Struct Reference

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

#include <kanzi/core.ui/platform/graphics_backend/gl/shader_create_info.hpp>

Inheritance diagram for kanzi::ShaderProgram:
kanzi::GPUResource kanzi::Resource kanzi::Object kanzi::MetaObject kanzi::PropertyObject

Classes

struct  SamplerInfo
 
struct  UniformProperty
 

Public Types

enum  FixedUniform {
  FixedUniformProjectionCameraWorldMatrix, FixedUniformWorldMatrix, FixedUniformProjectionMatrix, FixedUniformCameraMatrix,
  FixedUniformCameraPosition, FixedUniformViewport, FixedUniformWindowSize, FixedUniformNormalMatrix,
  FixedUniformCameraNormalMatrix, FixedUniformCameraWorldMatrix, FixedUniformNearFarPlane, FixedUniformTime,
  FixedUniformMorphWeights, FixedUniformMatrixPalette, FixedUniformDirectionalLightColor, FixedUniformPointLightColor,
  FixedUniformSpotLightColor, FixedUniformPointLightPosition, FixedUniformSpotLightPosition, FixedUniformDirectionalLightDirection,
  FixedUniformSpotLightDirection, FixedUniformPointLightRadius, FixedUniformPointLightAttenuation, FixedUniformSpotLightAttenuation,
  FixedUniformSpotLightCutoffAngle, FixedUniformSpotLightConeParameters, FixedUniformSpotLightExponent, FixedUniformCount,
  FixedUniformInvalid
}
 Fixed uniform locations of the shader program. More...
 
enum  UniformTransformation {
  UniformTransformationPassThrough, UniformTransformationSRgbToLinear, UniformTransformationLinearToSRgb, UniformTransformationNotPresent,
  UniformTransformationCount
}
 How value for uniform should be transformed when setting uniform value. More...
 
enum  UniformSourceType { UniformSourceTypeManual, UniformSourceTypePropertyType, UniformSourceTypeFixedUniformByUniformName }
 
enum  Status {
  StatusUnsupportedFormat, StatusCompileError, StatusLinkError, StatusInvalidAttributeLocation,
  StatusValid
}
 Status tells if shader creation parameters can be used to create a shader. More...
 
typedef array< int, VertexAttribute::SemanticCountFixedAttributeArray
 
typedef FixedAttributeArray::iterator FixedAttributeArrayIterator
 
typedef FixedAttributeArray::const_iterator FixedAttributeArrayConstIterator
 
typedef vector< UniformPropertyUniformContainer
 
typedef UniformContainer::const_iterator UniformContainerConstIterator
 
typedef vector< int > UniformLocationContainer
 
- Public Types inherited from kanzi::GPUResource
enum  MemoryType { GpuOnly, GpuAndRam, RamOnly }
 Memory upload and RAM preservation strategy for GPU resources. More...
 
- Public Types inherited from kanzi::PropertyObject
typedef intrusive_ptr< AbstractPropertyTypeDescriptor::PropertyStoragePropertyStoragePtr
 
typedef vector< PropertyStoragePtrPropertyStorageContainer
 
typedef PropertyStorageContainer::iterator PropertyStorageIterator
 
typedef PropertyStorageContainer::const_iterator PropertyStorageConstIterator
 
typedef PropertyStorageContainer::reverse_iterator PropertyStorageReverseIterator
 

Public Member Functions

 ShaderProgram (Domain *domain, const CreateInfo &createInfo, string_view name)
 
bool getBlendingControl () const
 Get shader blending control. More...
 
AbstractPropertyType getPropertyTypeByName (string_view propertyTypeName) const
 Gets property type from shader program by name. Returns 0 if not found. More...
 
UniformContainer::const_iterator beginPropertyTypes () const
 
UniformContainer::const_iterator endPropertyTypes () const
 
unsigned int getProgramHandle () const
 Get shader program handle. More...
 
const ShaderAttributeCollectiongetVertexFormat () const
 
void bind () const
 Binds the shader program for rendering. More...
 
bool hasSamplersWithoutProperties () const
 Return true if shader program has samplers that have no corresponding texture property. More...
 
ShaderTextureUniform getTextureUniformLocation (unsigned int textureUnit) const
 Returns texture size uniform locations from shader program. More...
 
int getUniformLocation (unsigned int propertyIndex)
 Get uniform location in shader program with property index. More...
 
int getUniformLocationSlow (string_view name)
 Get uniform location in the shader program by name. More...
 
UniformTransformation getFixedUniformTransformation (FixedUniform fixedUniform) const
 Get uniform transformation for a fixed uniform. More...
 
void setStrictWarningLogged ()
 
bool getStrictWarningLogged () const
 
unsigned int getLightCount (Light::Type lightType) const
 
virtual void reloadFromKzbOverride (KzcInputStream *inputStream, const KzuBinaryFileInfo *file) KZ_OVERRIDE
 For internal use. More...
 
virtual void reloadFromKzbOverride (KzbFile &kzbFile, ReadOnlyMemoryFile &file, KzbMemoryParser &parser) KZ_OVERRIDE
 Resource::reloadFromKzbOverride() implementation. More...
 
virtual bool isDeployedOverride () const KZ_OVERRIDE
 GpuResoucre::isDeployedOverride() implementation. More...
 
 CreateInfo ()
 Constructs empty create info structure for shader program creation. More...
 
Status validate (const Renderer &renderer) const
 Perform validation of shader creation parameters. More...
 
void addUniform (AbstractPropertyType propertyType, UniformTransformation transform=UniformTransformationPassThrough)
 Adds a property type uniform to shader. More...
 
 CreateInfoShaderSources (const char *vertexShaderSourceCode, const char *fragmentShaderSourceCode)
 Construct a create info structure for shader program creation from vertex and fragment shader source code. More...
 
 CreateInfoShaderBinary (unsigned int shaderBinaryFormat, unsigned int dataSize, void *data)
 Construct a create info structure for shader program creation from precompiled shader binary. More...
 
 CreateInfoShaderBinary (unsigned int shaderBinaryFormat, unsigned int vertexShaderBinaryByteCount, void *vertexShaderBinary, unsigned int fragmentShaderBinaryByteCount, void *fragmentShaderBinary)
 Construct a create info structure for shader program creation from precompiled shader binary data. More...
 
 CreateInfoProgramBinary (unsigned int programBinaryFormat, unsigned int dataSize, void *data)
 Construct a create info structure for shader program creation from precompiled program binary. More...
 
- Public Member Functions inherited from kanzi::GPUResource
virtual ~GPUResource () KZ_OVERRIDE
 
void invalidate ()
 Notify resource that graphics context was lost and all GPU resources are invalid. More...
 
unsigned int getGPUMemoryUsage () const
 
RenderergetRenderer () const
 
bool isDeployed () const
 
- Public Member Functions inherited from kanzi::Resource
KzcMemoryManagergetMemoryManager () const
 
 Resource (Domain *domain, string_view name)
 
virtual ~Resource ()
 
virtual void loadFromKZB (const ResourceLoaderThreadContext *threadContext, KzcInputStream *inputStream, const KzuBinaryFileInfo *file)
 Function for loading the resource from .KZB. More...
 
virtual void unloadOverride ()
 Unload function for resource. Releases all CPU memory taken by the resource except the resource loader. More...
 
virtual unsigned int getCPUMemoryUsage () const
 Function for getting the memory usage of a resource. More...
 
void setKZB (const KzuBinaryDirectory *binaryDirectory, string_view path)
 Set the binary directory and path of the resource. More...
 
const string & getName () const
 Gets the resource name. More...
 
const string & getUrl () const
 Gets the resource URL. More...
 
void setUrl (string_view url)
 Sets the resource URL. More...
 
void setNotLoaded ()
 
bool isFromKZB () const
 
void reload ()
 
void reloadFromKzb (KzcInputStream *inputStream, const KzuBinaryFileInfo *file)
 
void reloadFromKzb (KzbFile &kzbFile, ReadOnlyMemoryFile &file, KzbMemoryParser &parser)
 
void reloadFromFile (string_view filePath)
 
void load ()
 
void unload ()
 
bool isLoaded () const
 
void kzuResourceLoad_private (const ResourceLoaderThreadContext *threadContext)
 Private function for kzuResourceLoad() with specified thread context. More...
 
void kzuResourceFinishLoading_private (const ResourceLoaderThreadContext *threadContext)
 Private function for finishing the loading of the resource. More...
 
bool isKeepAlive () const
 Tells if the resource has keep alive flag set. More...
 
void setKeepAlive (bool keepAlive)
 Sets the keep alive flag. More...
 
- Public Member Functions inherited from kanzi::Object
 Object (Domain *domain)
 
virtual ~Object ()
 
DomaingetDomain () const
 Returns the domain the object belongs to. More...
 
KzuTaskSchedulergetTaskScheduler () const
 Returns the task scheduler of the object. More...
 
KzuMessageDispatchergetMessageDispatcher () const
 Returns the message dispatcher of the object. More...
 
ResourceManagergetResourceManager () const
 Returns the resource manager of the object. More...
 
virtual const MetaclassgetDynamicMetaclass () const KZ_OVERRIDE
 Returns the metaclass of the dynamic type of the object. More...
 
AppliedStyleEntrySharedPtr applyObjectStyle (kanzi::StyleSharedPtr style)
 Applies a style to an object. More...
 
void unapplyObjectStyle (AppliedStyleEntrySharedPtr appliedStyleEntry)
 
void applyObjectStyles ()
 Apply all styles for an object node. More...
 
void unapplyObjectStyles ()
 Unapplies and removes all applied styles. More...
 
- Public Member Functions inherited from kanzi::MetaObject
virtual ~MetaObject ()
 
bool isTypeOf (const Metaclass *objectType) const
 Determines if the type of this object is the given type or derived from it. More...
 
- Public Member Functions inherited from kanzi::PropertyObject
 PropertyObject ()
 
virtual ~PropertyObject ()
 
template<typename DataType >
void setProperty (const PropertyType< DataType > &propertyType, typename PropertyType< DataType >::Traits::ParameterType value)
 Sets the local value of a property. More...
 
void removeKzbProperties ()
 
template<typename DataType >
PropertyType< DataType >::Traits::ReturnType getProperty (const PropertyType< DataType > &propertyType) const
 Returns the current value of a property. More...
 
template<typename DataType >
optional< typename PropertyType< DataType >::Traits::ReturnType > getOptionalProperty (const PropertyType< DataType > &propertyType) const
 Evaluates the property value in the same way as the overload above but does not default to the value in property metadata if there are no inputs to the property value. More...
 
template<typename DataType >
PropertyType< DataType >::Traits::ReturnType getPropertyBase (const PropertyType< DataType > &propertyType) const
 Returns the current value of a property disregarding modifiers. More...
 
template<typename DataType >
void setAbstractProperty (AbstractPropertyType abstractPropertyType, typename PropertyType< DataType >::Traits::ParameterType value)
 
template<typename DataType >
PropertyType< DataType >::Traits::ReturnType getAbstractProperty (AbstractPropertyType abstractPropertyType) const
 
template<typename DataType >
PropertyType< DataType >::Traits::ReturnType getAbstractPropertyBase (AbstractPropertyType abstractPropertyType) const
 
template<typename DataType >
optional< typename PropertyType< DataType >::Traits::ReturnType > getOptionalAbstractProperty (AbstractPropertyType abstractPropertyType) const
 
void setPropertyFlag (AbstractPropertyType propertyType, uint32_t flag)
 
bool isPropertyFlagSet (AbstractPropertyType propertyType, uint32_t flag) const
 
void clearPropertyFlag (AbstractPropertyType propertyType, uint32_t flag)
 
bool hasValue (AbstractPropertyType propertyType) const
 Evaluates whether there are any inputs into the property value. More...
 
bool hasBaseValue (AbstractPropertyType propertyType) const
 Evaluates whether there are any inputs into the property value, disregarding modifiers. More...
 
bool hasLocalValue (AbstractPropertyType propertyType) const
 Evaluates whether there is a local value set for the property. More...
 
bool hasNonClassValue (AbstractPropertyType propertyType) const
 Evaluates whether there is a value of any precedence higher than class default value set for the property. More...
 
void removeLocalValue (AbstractPropertyType propertyType)
 Removes the local value associated with the property. More...
 
void copyLocalValue (const PropertyObject &other, AbstractPropertyType propertyType)
 Copies local value of single property from another object. More...
 
void copyLocalValues (const PropertyObject &other)
 Copies all local values from another object. More...
 
virtual void onPropertyChanged (AbstractPropertyType propertyType, PropertyNotificationReason reason)
 Virtual function to handle property change notifications. More...
 
template<typename DataType >
void addPropertyValueSource (const PropertyType< DataType > &propertyType, typename PropertyType< DataType >::Descriptor::TypedValueSource *valueSource, PropertyValuePrecedence precedence, void *owner)
 
template<typename DataType >
void removePropertyValueSource (const PropertyType< DataType > &propertyType, typename PropertyType< DataType >::Descriptor::TypedValueSource *valueSource, void *owner)
 
template<typename DataType >
void addPropertyModifier (const PropertyType< DataType > &propertyType, typename PropertyType< DataType >::Descriptor::ModifierCallback callback, void *owner)
 
template<typename DataType >
void removePropertyModifier (const PropertyType< DataType > &propertyType, typename PropertyType< DataType >::Descriptor::ModifierCallback callback, void *owner)
 
void validatePropertyModifiers (AbstractPropertyType propertyType)
 
template<typename DataType >
void addPropertyNotificationHandler (const PropertyType< DataType > &propertyType, typename PropertyType< DataType >::Descriptor::NotificationCallback callback, void *owner)
 
template<typename DataType >
void removePropertyNotificationHandler (const PropertyType< DataType > &propertyType, typename PropertyType< DataType >::Descriptor::NotificationCallback callback, void *owner)
 
template<typename DataType >
size_t getPropertyNotificationHandlerCount (const PropertyType< DataType > &propertyType)
 Gets number of current notification handlers for given property type. More...
 

Static Public Member Functions

static ResourceManager::LoadTaskSharedPtr createLoadTask (string_view name, KzbFile *kzbFile, unique_ptr< ReadOnlyMemoryFile > file)
 
static ShaderProgramSharedPtr create (Domain *domain, const CreateInfo &createInfo, string_view name)
 
- Static Public Member Functions inherited from kanzi::Object
static const MetaclassgetStaticMetaclass ()
 Returns the metaclass of Object class. More...
 
static PropertyTypeEditorInfoSharedPtr makeEditorInfo ()
 Default implementation that returns empty editor info. More...
 
- Static Public Member Functions inherited from kanzi::MetaObject
static const MetaclassgetStaticMetaclass ()
 Returns the metaclass of Object class. More...
 
static PropertyTypeEditorInfoSharedPtr makeEditorInfo ()
 Default implementation that returns empty editor info. More...
 

Public Attributes

string vertexShaderSource
 Vertex shader source code. More...
 
string fragmentShaderSource
 Fragment shader source code. More...
 
unsigned int programBinaryFormat
 Format for program binary. More...
 
string programBinaryData
 Program binary data. More...
 
unsigned int combinedShaderBinaryFormat
 Format for combined shader binary. More...
 
string combinedShaderBinaryData
 Combined shader binary data. More...
 
unsigned int separateShaderBinaryFormat
 Format for separate shader binaries. More...
 
string separateShaderBinaryVertexData
 Vertex shader binary data when using separate shader binaries. More...
 
string separateShaderBinaryFragmentData
 Fragment shader binary data when using separate shader binaries. More...
 
UniformContainer uniforms
 Uniforms. More...
 
ShaderAttributeCollection vertexFormat
 Shader vertex attributes. More...
 
array< UniformTransformation, FixedUniformCountfixedUniformTransformations
 Uniform transformations for fixed engine uniforms. More...
 
bool blendingControl
 Indicates whether ShaderProgram created from this createInfo should be able to change blending mode. More...
 

Protected Member Functions

virtual void reloadOverride () KZ_OVERRIDE
 Resource::reloadOverride() implementation. More...
 
virtual void invalidateOverride () KZ_OVERRIDE
 GPUResource::invalidateOverride() implementation. More...
 
- Protected Member Functions inherited from kanzi::GPUResource
 GPUResource (Domain *domain, string_view name="")
 
virtual unsigned int getGPUMemoryUsageOverride () const
 
- Protected Member Functions inherited from kanzi::Resource
virtual void reloadFromFileOverride (string_view filePath)
 
virtual unsigned int getCPUMemoryUsageOverride () const
 
- Protected Member Functions inherited from kanzi::Object
void initialize ()
 
void onCopy (const Object &other)
 
- Protected Member Functions inherited from kanzi::MetaObject
 MetaObject ()
 
void initialize ()
 
- Protected Member Functions inherited from kanzi::PropertyObject
void addPropertyValueSource (AbstractPropertyTypeDescriptor &descriptor, AbstractPropertyTypeDescriptor::ValueSource *valueSource, PropertyValuePrecedence precedence, void *owner)
 
void removePropertyValueSource (AbstractPropertyTypeDescriptor &descriptor, AbstractPropertyTypeDescriptor::ValueSource *valueSource, void *owner)
 
AbstractPropertyTypeDescriptor::ValueSourceEntrygetTopValueSourceEntry (AbstractPropertyTypeDescriptor::PropertyStorage &propertyStorage) const
 
AbstractPropertyTypeDescriptor::ValueSourceEntrygetTopValueSourceEntry (AbstractPropertyTypeDescriptor &descriptor) const
 
AbstractPropertyTypeDescriptor::ValueSourcegetTopValueSource (AbstractPropertyTypeDescriptor &descriptor) const
 
AbstractPropertyTypeDescriptor::ValueSourcegetFinalValueSource (AbstractPropertyTypeDescriptor &descriptor) const
 
AbstractPropertyTypeDescriptor::ValueSourcegetNonClassValueSource (AbstractPropertyTypeDescriptor &descriptor) const
 
AbstractPropertyTypeDescriptor::ValueSourcegetClassValueSource (AbstractPropertyTypeDescriptor &descriptor) const
 
AbstractPropertyTypeDescriptor::ValueSourceEntryfindLocalValueSourceEntry (AbstractPropertyTypeDescriptor::PropertyStorage &propertyStorage)
 
AbstractPropertyTypeDescriptor::ValueSourceEntryconstructLocalValueSourceEntry (AbstractPropertyTypeDescriptor &descriptor, AbstractPropertyTypeDescriptor::PropertyStorage &propertyStorage)
 
AbstractPropertyTypeDescriptor::ValueSourceEntryacquireLocalValueSourceEntry (AbstractPropertyTypeDescriptor &descriptor, PropertyStoragePtr &propertyStorage)
 
AbstractPropertyTypeDescriptor::PropertyStoragefindPropertyStorage (AbstractPropertyTypeDescriptor &descriptor) const
 
PropertyStoragePtr findPropertyStoragePtr (AbstractPropertyTypeDescriptor &descriptor) const
 Gets property storage intrusive pointer that can be used to hold a reference until end of operation. More...
 
PropertyStoragePtr constructPropertyStorage (AbstractPropertyTypeDescriptor &descriptor)
 
PropertyStoragePtr acquirePropertyStorage (AbstractPropertyTypeDescriptor &descriptor)
 
AbstractPropertyTypeDescriptor::ModifierStorageacquireModifierStorage (AbstractPropertyTypeDescriptor &descriptor, AbstractPropertyTypeDescriptor::PropertyStorage &propertyStorage)
 
AbstractPropertyTypeDescriptor::ModifierStoragefindModifierStorage (AbstractPropertyTypeDescriptor &descriptor)
 
AbstractPropertyTypeDescriptor::NotificationStorageacquireNotificationStorage (AbstractPropertyTypeDescriptor &descriptor)
 
AbstractPropertyTypeDescriptor::NotificationStoragefindNotificationStorage (AbstractPropertyTypeDescriptor &descriptor)
 
AbstractPropertyTypeDescriptorfindPropertyTypeDescriptorByUnqualifiedNameAndDataType (string_view unqualifiedName, PropertyDataType dataType)
 
void validatePropertyModifiersAndNotifyHandlers (PropertyStoragePtr &propertyStorage)
 
void copyLocalValue (const AbstractPropertyTypeDescriptor::PropertyStorage &otherPropertyStorage)
 Copy local value from property storage. More...
 
PropertyStorageContainer::iterator beginPropertyStorage ()
 
PropertyStorageContainer::iterator endPropertyStorage ()
 
virtual void notifyPropertyHandlers (PropertyStoragePtr &propertyStorage, PropertyNotificationReason reason)
 
void onCopy (const PropertyObject &other)
 

Friends

void swap (ShaderProgram &shader1, ShaderProgram &shader2)
 

Additional Inherited Members

- Protected Types inherited from kanzi::Object
typedef vector< AppliedStyleEntrySharedPtrAppliedStyleContainer
 Applied style container. More...
 
- Protected Attributes inherited from kanzi::Object
AppliedStyleContainer m_appliedStyles
 Listing of applied styles applied to this object. More...
 

Detailed Description

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

ShaderProgram creation parameters for initialized from vendor specific GL program binary.

ShaderProgram creation parameters for initialized from vendor specific GL shader binary.

ShaderProgram creation parameters for initialized from shader source code strings.

Struct which contains all the parameters that are needed for Shader creation.

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
ShaderProgram::CreateInfo
ShaderProgram::CreateInfoShaderSources
ShaderProgram::CreateInfoShaderBinary
ShaderProgram::CreateInfoProgramBinary

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.

See also
Shader

Member Typedef Documentation

typedef FixedAttributeArray::iterator kanzi::ShaderProgram::FixedAttributeArrayIterator
typedef FixedAttributeArray::const_iterator kanzi::ShaderProgram::FixedAttributeArrayConstIterator
typedef UniformContainer::const_iterator kanzi::ShaderProgram::UniformContainerConstIterator

Member Enumeration Documentation

Fixed uniform locations of the shader program.

Enumerator
FixedUniformProjectionCameraWorldMatrix 

Projection * camera * world matrix.

FixedUniformWorldMatrix 

World matrix.

FixedUniformProjectionMatrix 

Projection matrix.

FixedUniformCameraMatrix 

Camera matrix.

FixedUniformCameraPosition 

Camera position.

FixedUniformViewport 

Viewport area.

FixedUniformWindowSize 

Vec2 containing current window size.

FixedUniformNormalMatrix 

Normal matrix.

FixedUniformCameraNormalMatrix 

Camera * normal matrix (screenspace normal)

FixedUniformCameraWorldMatrix 

Camera * world matrix.

FixedUniformNearFarPlane 

Vec2 containing near and far plane.

FixedUniformTime 

Debug timer.

FixedUniformMorphWeights 

Morph weights.

FixedUniformMatrixPalette 

Bone matrices.

FixedUniformDirectionalLightColor 
FixedUniformPointLightColor 
FixedUniformSpotLightColor 
FixedUniformPointLightPosition 
FixedUniformSpotLightPosition 
FixedUniformDirectionalLightDirection 
FixedUniformSpotLightDirection 
FixedUniformPointLightRadius 
FixedUniformPointLightAttenuation 
FixedUniformSpotLightAttenuation 
FixedUniformSpotLightCutoffAngle 
FixedUniformSpotLightConeParameters 
FixedUniformSpotLightExponent 
FixedUniformCount 

Number of fixed uniforms.

FixedUniformInvalid 

How value for uniform should be transformed when setting uniform value.

Enumerator
UniformTransformationPassThrough 

No transformation.

UniformTransformationSRgbToLinear 

Convert cfrom sRGB to linear.

UniformTransformationLinearToSRgb 

Convert from linear to sRGB.

UniformTransformationNotPresent 

Fixed uniform is not present.

UniformTransformationCount 

Number of uniform transformations.

Enumerator
UniformSourceTypeManual 

User is responsible for setting the uniform value.

UniformSourceTypePropertyType 

The value is taken from the property looked up by name.

UniformSourceTypeFixedUniformByUniformName 

The value is a fixed uniform that is looked up by name.

Status tells if shader creation parameters can be used to create a shader.

If status is not StatusValid, create info must not be passed to ShaderProgram::create().

Enumerator
StatusUnsupportedFormat 

Shader binary format is not supported.

StatusCompileError 

Shader fails compilation.

StatusLinkError 

Shader fails linking.

StatusInvalidAttributeLocation 

Shader has invalid vertex attribute locations.

StatusValid 

CreateInfo is valid and can be used to create Shader.

Constructor & Destructor Documentation

kanzi::ShaderProgram::ShaderProgram ( Domain domain,
const CreateInfo createInfo,
string_view  name 
)
explicit

Member Function Documentation

static ResourceManager::LoadTaskSharedPtr kanzi::ShaderProgram::createLoadTask ( string_view  name,
KzbFile kzbFile,
unique_ptr< ReadOnlyMemoryFile file 
)
static
static ShaderProgramSharedPtr kanzi::ShaderProgram::create ( Domain domain,
const CreateInfo createInfo,
string_view  name 
)
static
bool kanzi::ShaderProgram::getBlendingControl ( ) const
inline

Get shader blending control.

See also
setBlendingControlEnabled()
Returns
Shader blending control. If true, applying materials using this shader will set renderer blend mode.
AbstractPropertyType kanzi::ShaderProgram::getPropertyTypeByName ( string_view  propertyTypeName) const

Gets property type from shader program by name. Returns 0 if not found.

UniformContainer::const_iterator kanzi::ShaderProgram::beginPropertyTypes ( ) const
inline
UniformContainer::const_iterator kanzi::ShaderProgram::endPropertyTypes ( ) const
inline
unsigned int kanzi::ShaderProgram::getProgramHandle ( ) const

Get shader program handle.

Returns
Program handle.
const ShaderAttributeCollection& kanzi::ShaderProgram::getVertexFormat ( ) const
void kanzi::ShaderProgram::bind ( ) const

Binds the shader program for rendering.

bool kanzi::ShaderProgram::hasSamplersWithoutProperties ( ) const

Return true if shader program has samplers that have no corresponding texture property.

ShaderTextureUniform kanzi::ShaderProgram::getTextureUniformLocation ( unsigned int  textureUnit) const

Returns texture size uniform locations from shader program.

int kanzi::ShaderProgram::getUniformLocation ( unsigned int  propertyIndex)

Get uniform location in shader program with property index.

Parameters
propertyIndexIndex of property in shader. Must be valid index within the uniforms.
Returns
Uniform location in shader program.
int kanzi::ShaderProgram::getUniformLocationSlow ( string_view  name)

Get uniform location in the shader program by name.

Parameters
nameName of the uniform. Compared to the property name.
Returns
Uniform location in shader program, or -1 if uniform was not found in the shader program.
UniformTransformation kanzi::ShaderProgram::getFixedUniformTransformation ( FixedUniform  fixedUniform) const

Get uniform transformation for a fixed uniform.

Parameters
fixedUniformFixed uniform to query.
Returns
Uniform transformation for requested fixed uniform.
void kanzi::ShaderProgram::setStrictWarningLogged ( )
inline
bool kanzi::ShaderProgram::getStrictWarningLogged ( ) const
inline
unsigned int kanzi::ShaderProgram::getLightCount ( Light::Type  lightType) const
inline
virtual void kanzi::ShaderProgram::reloadFromKzbOverride ( KzcInputStream inputStream,
const KzuBinaryFileInfo file 
)
virtual

For internal use.

Do not use. Resource::reloadFromKzbOverride() implementation.

Reimplemented from kanzi::Resource.

virtual void kanzi::ShaderProgram::reloadFromKzbOverride ( KzbFile kzbFile,
ReadOnlyMemoryFile file,
KzbMemoryParser parser 
)
virtual

Resource::reloadFromKzbOverride() implementation.

Reimplemented from kanzi::Resource.

virtual bool kanzi::ShaderProgram::isDeployedOverride ( ) const
virtual

GpuResoucre::isDeployedOverride() implementation.

Implements kanzi::GPUResource.

virtual void kanzi::ShaderProgram::reloadOverride ( )
protectedvirtual

Resource::reloadOverride() implementation.

Reimplemented from kanzi::Resource.

virtual void kanzi::ShaderProgram::invalidateOverride ( )
protectedvirtual

GPUResource::invalidateOverride() implementation.

Reimplemented from kanzi::GPUResource.

kanzi::ShaderProgram::CreateInfo ( )
explicit

Constructs empty create info structure for shader program creation.

Members of the structure must be filled in before the structure can be used in ShaderProgram::create().

Status kanzi::ShaderProgram::validate ( const Renderer renderer) const

Perform validation of shader creation parameters.

You can call validate() to see if shader creation parameters are valid before you pass create info to ShaderProgram::create().

Parameters
rendererRenderer to validate with.
Returns
StatusValid if these creation parameters can be used to create a shader. Otherwise a reason code for why this CreateInfo cannot be used to create a shader.
void kanzi::ShaderProgram::addUniform ( AbstractPropertyType  propertyType,
UniformTransformation  transform = UniformTransformationPassThrough 
)

Adds a property type uniform to shader.

Parameters
propertyTypeProperty type.
transformUniform transformation. See UniformTransformation.
kanzi::ShaderProgram::CreateInfoShaderSources ( const char *  vertexShaderSourceCode,
const char *  fragmentShaderSourceCode 
)
explicit

Construct a create info structure for shader program creation from vertex and fragment shader source code.

Note
After constructing the create info, you must insert used attributes to the createInfo.vertexFormat.
Parameters
vertexShaderSourceCodeSource code for vertex shader.
fragmentShaderSourceCodeSource code for fragment shader.
kanzi::ShaderProgram::CreateInfoShaderBinary ( unsigned int  shaderBinaryFormat,
unsigned int  dataSize,
void *  data 
)
explicit

Construct a create info structure for shader program creation from precompiled shader binary.

Note
Supported shader binary formats are vendor specific. Each vendor uses their own shader binary formats. Use Renderer::isGlShaderBinaryFormatSupported() to verify that shaderBinaryFormat is supported.
After constructing the create info, you must insert used attributes to createInfo.vertexFormat.
Parameters
shaderBinaryFormatGL shader binary format.
dataSizeSize of shader binary data in bytes.
dataPointer to shader binary data.
kanzi::ShaderProgram::CreateInfoShaderBinary ( unsigned int  shaderBinaryFormat,
unsigned int  vertexShaderBinaryByteCount,
void *  vertexShaderBinary,
unsigned int  fragmentShaderBinaryByteCount,
void *  fragmentShaderBinary 
)
explicit

Construct a create info structure for shader program creation from precompiled shader binary data.

This version takes in two data blobs, one for vertex shader and another one for fragment shader.

Note
Supported shader binary formats are vendor specific. Each vendor uses their own shader binary formats. Use Renderer::isGlShaderBinaryFormatSupported() to verify that shaderBinaryFormat is supported.
After constructing the create info, you must insert used attributes to createInfo.vertexFormat.
Parameters
shaderBinaryFormatGL shader binary format.
vertexShaderBinaryByteCountSize of vertex shader binary data in bytes.
vertexShaderBinaryPointer to vertex shader binary data.
fragmentShaderBinaryByteCountSize of fragment shader binary data in bytes.
fragmentShaderBinaryPointer to fragment shader binary data.
kanzi::ShaderProgram::CreateInfoProgramBinary ( unsigned int  programBinaryFormat,
unsigned int  dataSize,
void *  data 
)
explicit

Construct a create info structure for shader program creation from precompiled program binary.

Note
After constructing the create info, you must insert used attributes to createInfo.vertexFormat.
Parameters
programBinaryFormatGL program binary format.
dataSizeSize of shader binary data in bytes.
dataPointer to shader binary data.

Friends And Related Function Documentation

void swap ( ShaderProgram shader1,
ShaderProgram shader2 
)
friend

Member Data Documentation

string kanzi::ShaderProgram::vertexShaderSource

Vertex shader source code.

string kanzi::ShaderProgram::fragmentShaderSource

Fragment shader source code.

unsigned int kanzi::ShaderProgram::programBinaryFormat

Format for program binary.

string kanzi::ShaderProgram::programBinaryData

Program binary data.

unsigned int kanzi::ShaderProgram::combinedShaderBinaryFormat

Format for combined shader binary.

string kanzi::ShaderProgram::combinedShaderBinaryData

Combined shader binary data.

unsigned int kanzi::ShaderProgram::separateShaderBinaryFormat

Format for separate shader binaries.

string kanzi::ShaderProgram::separateShaderBinaryVertexData

Vertex shader binary data when using separate shader binaries.

string kanzi::ShaderProgram::separateShaderBinaryFragmentData

Fragment shader binary data when using separate shader binaries.

UniformContainer kanzi::ShaderProgram::uniforms

Uniforms.

ShaderAttributeCollection kanzi::ShaderProgram::vertexFormat

Shader vertex attributes.

array<UniformTransformation, FixedUniformCount> kanzi::ShaderProgram::fixedUniformTransformations

Uniform transformations for fixed engine uniforms.

bool kanzi::ShaderProgram::blendingControl

Indicates whether ShaderProgram created from this createInfo should be able to change blending mode.

When blending control is enabled, materials using a ShaderProgram can set renderer blend mode. If blending control is disabled, materials using a ShaderProgram will leave blend mode unchanged.


The documentation for this struct was generated from the following files: