Kanzi  3.9.9
Kanzi Engine C++ API
kanzi::GlRenderState Class Reference

OpenGL render state. More...

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

Classes

class  RenderValueInfo
 Render value information. More...
 
union  RenderValueUnion
 Union containing one render value to be arranged into an array. More...
 
struct  TextureRenderValue
 Container for texture render value and the width/height uniforms. More...
 

Public Types

using HandleType = int
 Type for handle identifiers into values in the render state. More...
 

Public Member Functions

void attach (MaterialSharedPtr material)
 Attach to a certain material/node combination. More...
 
bool bind (Renderer &renderer)
 Applies the render state the render state. More...
 
template<typename T >
void fillDefaultValues (GlRenderState::HandleType handle, size_t startIndex, size_t endIndex)
 Fills a uniform array with default values. More...
 
optional< int > getBlendModeValue () const
 Get blend mode value. More...
 
template<typename T >
size_t getElementCount (GlRenderState::HandleType handle) const
 Gets the number of elements for given handle. More...
 
template<>
size_t getElementCount (GlRenderState::HandleType handle) const
 GlRenderState::getElementCount() specialization. More...
 
template<typename T >
HandleType getHandle (string_view name)
 Access handle by type. More...
 
template<>
GlRenderState::HandleType getHandle (string_view name)
 GlRenderState::getHandle() specialization. More...
 
MaterialSharedPtr getMaterial () const
 Gets the attached material. More...
 
template<typename T >
T getValue (HandleType handle, size_t index) const
 Accesses a value by handle. More...
 
template<typename T >
T getValue (HandleType handle) const
 Accesses a value by handle. More...
 
template<>
TextureSharedPtr getValue (GlRenderState::HandleType handle) const
 GlRenderState::getValue() specialization. More...
 
 GlRenderState ()
 Empty constructor. More...
 
template<typename T >
bool handleMatches (HandleType handle, string_view name) const
 Checks whether given handle matches the current render state. More...
 
template<>
bool handleMatches (GlRenderState::HandleType handle, string_view name) const
 GlRenderState::handleMatches() specialization. More...
 
bool hasMaterial () const
 Returns whether the render state has a valid material. More...
 
void reattach ()
 Reattach already-attached material. More...
 
void setBlendModeValue (optional< int > value)
 Sets the blend mode value. More...
 
template<typename T >
bool setRange (GlRenderState::HandleType handle, AbstractRange &range)
 Specialized implementation for assigning range. More...
 
bool setRange (HandleType handle, AbstractRange &range)
 Sets values of a render target array from a range. More...
 
bool setRange (HandleType handle, AbstractRange *range)
 Sets values of a render target array from a range. More...
 
bool setRange (HandleType handle, const AbstractRangeSharedPtr &range)
 Sets values of a render target array from a range. More...
 
template<>
bool setRange (GlRenderState::HandleType, AbstractRange &)
 GlRenderState::setRange() specialization. More...
 
template<>
bool setRange (GlRenderState::HandleType, AbstractRange &)
 GlRenderState::setRange() specialization. More...
 
template<>
bool setRange (GlRenderState::HandleType, AbstractRange &)
 GlRenderState::setRange() specialization. More...
 
template<>
bool setRange (GlRenderState::HandleType, AbstractRange &)
 GlRenderState::setRange() specialization. More...
 
template<typename T >
bool setTypedValue (GlRenderState::HandleType handle, const Variant &value, size_t elementIndex)
 Sets a variant value. More...
 
template<typename T >
void setValue (HandleType handle, const T &value, size_t elementIndex)
 Set a render value identified by handle. More...
 
template<typename T >
void setValue (HandleType handle, const T &value)
 Wrapper for setting a render value by handle. More...
 

Protected Types

typedef vector< RenderValueInfoRenderValueInfoContainer
 Container for render value information. More...
 
typedef vector< RenderValueUnionRenderValueUnionContainer
 Container for render values. More...
 
typedef vector< TextureRenderValueTextureRenderValueContainer
 Container for texture render values. More...
 

Protected Member Functions

int acquireUniformLocation (string_view name) const
 Acquires uniform location from the attached material. More...
 
int acquireUniformLocation (AbstractPropertyType propertyType) const
 Acquires uniform location wrapper. More...
 
size_t allocateValues (size_t count)
 Allocates values from value array. More...
 
HandleType getHandle (PropertyDataType type, string_view name, size_t count)
 Accesses a handle by explicit information. More...
 
size_t getUniformElementCount (string_view name) const
 Gets the number of uniform elements in the attached material. More...
 
size_t getUniformElementCount (AbstractPropertyType propertyType) const
 Get uniform element count wrapper. More...
 
float * getValueArrayFloat (HandleType handle, size_t elementIndex)
 Gets a reference into the value array (as floats). More...
 
int * getValueArrayInt (HandleType handle, size_t elementIndex)
 Gets a reference into the value array (as integers). More...
 
template<>
size_t getValueSize ()
 GlRenderState::getValueSize() specialization. More...
 
template<>
size_t getValueSize ()
 GlRenderState::getValueSize() specialization. More...
 
void setTypedValue (HandleType handle, bool value, size_t elementIndex)
 Specialization for setting a value of specific type. More...
 
void setTypedValue (HandleType handle, int value, size_t elementIndex)
 Specialization for setting a value of specific type. More...
 
void setTypedValue (HandleType handle, float value, size_t elementIndex)
 Specialization for setting a value of specific type. More...
 
void setTypedValue (HandleType handle, ColorRGBA value, size_t elementIndex)
 Specialization for setting a value of specific type. More...
 
void setTypedValue (HandleType handle, Vector2 value, size_t elementIndex)
 Specialization for setting a value of specific type. More...
 
void setTypedValue (HandleType handle, Vector3 value, size_t elementIndex)
 Specialization for setting a value of specific type. More...
 
void setTypedValue (HandleType handle, Vector4 value, size_t elementIndex)
 Specialization for setting a value of specific type. More...
 
void setTypedValue (HandleType handle, const Matrix3x3 &value, size_t elementIndex)
 Specialization for setting a value of specific type. More...
 
void setTypedValue (HandleType handle, const Matrix4x4 &value, size_t elementIndex)
 Specialization for setting a value of specific type. More...
 
void setTypedValue (HandleType handle, const SRTValue2D &value, size_t elementIndex)
 Specialization for setting a value of specific type. More...
 
void setTypedValue (HandleType handle, const SRTValue3D &value, size_t elementIndex)
 Specialization for setting a value of specific type. More...
 
void setTypedValue (HandleType handle, void *value, size_t elementIndex)
 Specialization for setting a value of specific type. More...
 
void setTypedValue (HandleType handle, TextureSharedPtr value, size_t elementIndex)
 Specialization for setting a value of specific type. More...
 

Static Protected Member Functions

template<typename T >
static size_t getValueSize ()
 Gets the size of a render value type. More...
 
template<typename T >
static PropertyDataType getValueType ()
 Gets the property type of a render value type. More...
 

Protected Attributes

optional< int > m_blendModeValue
 Singular property value for blend mode. More...
 
RenderValueInfoContainer m_infoArray
 Render value information structures. More...
 
MaterialSharedPtr m_material
 Currently attached material. More...
 
TextureRenderValueContainer m_textureArray
 Render texture values, contain textures within the array. More...
 
vector< RenderValueUnionm_valueArray
 Render value unions. More...
 

Detailed Description

OpenGL render state.

Member Typedef Documentation

Type for handle identifiers into values in the render state.

Container for render value information.

Container for render values.

Container for texture render values.

Constructor & Destructor Documentation

kanzi::GlRenderState::GlRenderState ( )
inlineexplicit

Empty constructor.

Member Function Documentation

bool kanzi::GlRenderState::bind ( Renderer renderer)

Applies the render state the render state.

After calling this function, geometry can be rendered using the render state settings.

Parameters
rendererRenderer to use.
Returns
If the shader program was available and bound, true, otherwise false.
void kanzi::GlRenderState::attach ( MaterialSharedPtr  material)

Attach to a certain material/node combination.

Parameters
materialMaterial to attach to.
void kanzi::GlRenderState::reattach ( )

Reattach already-attached material.

Does nothing if no material attached.

MaterialSharedPtr kanzi::GlRenderState::getMaterial ( ) const
inline

Gets the attached material.

Returns
Shared pointer to material.
bool kanzi::GlRenderState::hasMaterial ( ) const
inline

Returns whether the render state has a valid material.

Returns
If a valid material is attached, true, otherwise false.
template<typename T >
void kanzi::GlRenderState::setValue ( HandleType  handle,
const T value,
size_t  elementIndex 
)
inline

Set a render value identified by handle.

The handle may be invalid (negative), in which case this function does nothing.

Parameters
handleIdentifying handle.
valueValue to set.
elementIndexIndex of the element in the value to set.
template<typename T >
void kanzi::GlRenderState::setValue ( HandleType  handle,
const T value 
)
inline

Wrapper for setting a render value by handle.

Element index is zero.

Parameters
handleIdentifying handle.
valueValue to set.
optional<int> kanzi::GlRenderState::getBlendModeValue ( ) const
inline

Get blend mode value.

Returns
Optional blend mode value.
Since
Kanzi 3.9.1 return data type changed from optional<GraphicsBlendMode> to optional<int>.
void kanzi::GlRenderState::setBlendModeValue ( optional< int >  value)
inline

Sets the blend mode value.

Parameters
valueOptional blend mode value.
Since
Kanzi 3.9.1 data type of value parameter changed from GraphicsBlendMode to optional<int>.
template<typename T >
HandleType kanzi::GlRenderState::getHandle ( string_view  name)
inline

Access handle by type.

Parameters
nameValue name.
Returns
Handle (index) to info array.
template<typename T >
size_t kanzi::GlRenderState::getElementCount ( GlRenderState::HandleType  handle) const
inline

Gets the number of elements for given handle.

Parameters
handleHandle.
Returns
Number of elements for the handle.
template<typename T >
T kanzi::GlRenderState::getValue ( HandleType  handle,
size_t  index 
) const
inline

Accesses a value by handle.

Handle must be valid, access with invalid handle is undefined behavior.

Parameters
handleHandle to value.
indexIndex of the value to access.
Returns
Value previously stored with the handle.
template<typename T >
T kanzi::GlRenderState::getValue ( HandleType  handle) const
inline

Accesses a value by handle.

Index of the accessed value is zero.

Parameters
handleHandle to value.
Returns
Value previously stored with the handle.
template<typename T >
bool kanzi::GlRenderState::handleMatches ( HandleType  handle,
string_view  name 
) const
inline

Checks whether given handle matches the current render state.

Parameters
handleHandle to check.
nameName to compare against.
Returns
True if given handle and name match in the render state, false otherwise.
template<typename T >
bool kanzi::GlRenderState::setTypedValue ( GlRenderState::HandleType  handle,
const Variant value,
size_t  elementIndex 
)
inline

Sets a variant value.

If the value is not an exact match, tries to cast the value to T.

Parameters
handleThe identifying handle.
valueThe variant value.
elementIndexThe index of the array element.
Returns
If setting the value succeeds, true, otherwise false.
Since
Kanzi 3.9.6
template<typename T >
void kanzi::GlRenderState::fillDefaultValues ( GlRenderState::HandleType  handle,
size_t  startIndex,
size_t  endIndex 
)
inline

Fills a uniform array with default values.

Parameters
handleThe identifying handle.
startIndexThe start index for the fill operation.
endIndexThe end index pointing to one after the last fill element.
Since
Kanzi 3.9.6.
template<typename T >
bool kanzi::GlRenderState::setRange ( GlRenderState::HandleType  handle,
AbstractRange range 
)
inline

Specialized implementation for assigning range.

If the array is larger than the range, writes default values to the remaining values in the end of the array. You must validate the handle before calling this function.

Parameters
handleValid handle from the render state.
rangeRange input.
Returns
If setting the value succeeds, true, otherwise false.
Since
Kanzi 3.9.6
bool kanzi::GlRenderState::setRange ( HandleType  handle,
AbstractRange range 
)

Sets values of a render target array from a range.

If the array is larger than the range, writes default values to the remaining values in the end of the array.

Parameters
handleHandle from the render state.
rangeRange input.
Returns
If setting the value succeeds, true, otherwise false.
Since
Kanzi 3.9.0
Kanzi 3.9.6 changed the type of the range parameter.
bool kanzi::GlRenderState::setRange ( HandleType  handle,
AbstractRange range 
)

Sets values of a render target array from a range.

If the array is larger than the range, writes default values to the remaining values in the end of the array. If the range is a nullptr, sets all the elements of the render target array to default values.

Parameters
handleHandle from the render state.
rangeRange input.
Returns
If value was successfully set, true, otherwise false.
Since
Kanzi 3.9.0
bool kanzi::GlRenderState::setRange ( HandleType  handle,
const AbstractRangeSharedPtr range 
)
inline

Sets values of a render target array from a range.

If the array is larger than the range, writes default values to the remaining values in the end of the array. If the range is a nullptr, sets all the elements of the render target array to default values.

Parameters
handleHandle from the render state.
rangeRange input.
Returns
If value was successfully set, true, otherwise false.
Since
Kanzi 3.9.0
int kanzi::GlRenderState::acquireUniformLocation ( string_view  name) const
protected

Acquires uniform location from the attached material.

Parameters
nameName to query.
Returns
Uniform location integer or -1 if not valid.
int kanzi::GlRenderState::acquireUniformLocation ( AbstractPropertyType  propertyType) const
inlineprotected

Acquires uniform location wrapper.

Parameters
propertyTypeProperty type to query.
Returns
Uniform location integer or -1 if not valid.
size_t kanzi::GlRenderState::getUniformElementCount ( string_view  name) const
protected

Gets the number of uniform elements in the attached material.

Parameters
nameName to query.
Returns
Number of elements in the uniform or 0 if not valid.
Since
Kanzi 3.9.7 changed the type of the return value to size_t.
size_t kanzi::GlRenderState::getUniformElementCount ( AbstractPropertyType  propertyType) const
inlineprotected

Get uniform element count wrapper.

Parameters
propertyTypeProperty type to query.
Returns
Number of elements in the uniform or 0 if not valid.
Since
Kanzi 3.9.7 changed the type of the return value to size_t.
size_t kanzi::GlRenderState::allocateValues ( size_t  count)
inlineprotected

Allocates values from value array.

Parameters
countNumber of values to allocate.
Returns
Starting index where values should be written.
HandleType kanzi::GlRenderState::getHandle ( PropertyDataType  type,
string_view  name,
size_t  count 
)
inlineprotected

Accesses a handle by explicit information.

Parameters
typeValue type.
nameValue name.
countNumber of values to allocate per element if new handle is required.
Returns
Handle (index) to info array.
int* kanzi::GlRenderState::getValueArrayInt ( HandleType  handle,
size_t  elementIndex 
)
inlineprotected

Gets a reference into the value array (as integers).

Contents of the value are not guaranteed, it points directly to the memory block within a value array.

Parameters
handleHandle to value info.
elementIndexIndex of the element for the render value, used only for error checking.
Returns
Pointer to value array as integer in given point.
float* kanzi::GlRenderState::getValueArrayFloat ( HandleType  handle,
size_t  elementIndex 
)
inlineprotected

Gets a reference into the value array (as floats).

Contents of the value are not guaranteed, it's pointing directly to the memory block within value array.

Parameters
handleHandle to value info.
elementIndexIndex of the element for the render value, used only for error checking.
Returns
Pointer to value array as float in given point.
void kanzi::GlRenderState::setTypedValue ( HandleType  handle,
bool  value,
size_t  elementIndex 
)
inlineprotected

Specialization for setting a value of specific type.

Parameters
handleName.
valueValue.
elementIndexIndex of the element to set.
void kanzi::GlRenderState::setTypedValue ( HandleType  handle,
int  value,
size_t  elementIndex 
)
inlineprotected

Specialization for setting a value of specific type.

Parameters
handleName.
valueValue.
elementIndexIndex of the element to set.
void kanzi::GlRenderState::setTypedValue ( HandleType  handle,
float  value,
size_t  elementIndex 
)
inlineprotected

Specialization for setting a value of specific type.

Parameters
handleName.
valueValue.
elementIndexIndex of the element to set.
void kanzi::GlRenderState::setTypedValue ( HandleType  handle,
ColorRGBA  value,
size_t  elementIndex 
)
inlineprotected

Specialization for setting a value of specific type.

Parameters
handleName.
valueValue.
elementIndexIndex of the element to set.
void kanzi::GlRenderState::setTypedValue ( HandleType  handle,
Vector2  value,
size_t  elementIndex 
)
inlineprotected

Specialization for setting a value of specific type.

Parameters
handleName.
valueValue.
elementIndexIndex of the element to set.
void kanzi::GlRenderState::setTypedValue ( HandleType  handle,
Vector3  value,
size_t  elementIndex 
)
inlineprotected

Specialization for setting a value of specific type.

Parameters
handleName.
valueValue.
elementIndexIndex of the element to set.
void kanzi::GlRenderState::setTypedValue ( HandleType  handle,
Vector4  value,
size_t  elementIndex 
)
inlineprotected

Specialization for setting a value of specific type.

Parameters
handleName.
valueValue.
elementIndexIndex of the element to set.
void kanzi::GlRenderState::setTypedValue ( HandleType  handle,
const Matrix3x3 value,
size_t  elementIndex 
)
inlineprotected

Specialization for setting a value of specific type.

Parameters
handleName.
valueValue.
elementIndexIndex of the element to set.
void kanzi::GlRenderState::setTypedValue ( HandleType  handle,
const Matrix4x4 value,
size_t  elementIndex 
)
inlineprotected

Specialization for setting a value of specific type.

Parameters
handleName.
valueValue.
elementIndexIndex of the element to set.
void kanzi::GlRenderState::setTypedValue ( HandleType  handle,
const SRTValue2D value,
size_t  elementIndex 
)
inlineprotected

Specialization for setting a value of specific type.

Parameters
handleName.
valueValue.
elementIndexIndex of the element to set.
void kanzi::GlRenderState::setTypedValue ( HandleType  handle,
const SRTValue3D value,
size_t  elementIndex 
)
inlineprotected

Specialization for setting a value of specific type.

Parameters
handleName.
valueValue.
elementIndexIndex of the element to set.
void kanzi::GlRenderState::setTypedValue ( HandleType  handle,
void *  value,
size_t  elementIndex 
)
inlineprotected

Specialization for setting a value of specific type.

This version intentionally exists to throw an exception on an invalid call.

Parameters
handleName.
valueValue.
elementIndexIndex of the element to set.
void kanzi::GlRenderState::setTypedValue ( HandleType  handle,
TextureSharedPtr  value,
size_t  elementIndex 
)
protected

Specialization for setting a value of specific type.

Parameters
handleName.
valueValue.
elementIndexIndex of the element to set.
Returns
Handle.
template<typename T >
static size_t kanzi::GlRenderState::getValueSize ( )
inlinestaticprotected

Gets the size of a render value type.

Returns
Number of values type requires.
template<typename T >
static PropertyDataType kanzi::GlRenderState::getValueType ( )
inlinestaticprotected

Gets the property type of a render value type.

Returns
Number of values type requires.
template<>
GlRenderState::HandleType kanzi::GlRenderState::getHandle ( string_view  name)

GlRenderState::getHandle() specialization.

template<>
bool kanzi::GlRenderState::handleMatches ( GlRenderState::HandleType  handle,
string_view  name 
) const
template<>
TextureSharedPtr kanzi::GlRenderState::getValue ( GlRenderState::HandleType  handle) const

GlRenderState::getValue() specialization.

template<>
size_t kanzi::GlRenderState::getElementCount ( GlRenderState::HandleType  handle) const
template<>
size_t kanzi::GlRenderState::getValueSize ( )
protected
template<>
size_t kanzi::GlRenderState::getValueSize ( )
protected
template<>
bool kanzi::GlRenderState::setRange ( GlRenderState::HandleType  ,
AbstractRange  
)

GlRenderState::setRange() specialization.

template<>
bool kanzi::GlRenderState::setRange ( GlRenderState::HandleType  ,
AbstractRange  
)

GlRenderState::setRange() specialization.

template<>
bool kanzi::GlRenderState::setRange ( GlRenderState::HandleType  ,
AbstractRange  
)

GlRenderState::setRange() specialization.

template<>
bool kanzi::GlRenderState::setRange ( GlRenderState::HandleType  ,
AbstractRange  
)

GlRenderState::setRange() specialization.

Member Data Documentation

optional<int> kanzi::GlRenderState::m_blendModeValue
protected

Singular property value for blend mode.

Since
Kanzi 3.9.1 data type changed from optional<GraphicsBlendMode> to optional<int>.
RenderValueInfoContainer kanzi::GlRenderState::m_infoArray
protected

Render value information structures.

vector<RenderValueUnion> kanzi::GlRenderState::m_valueArray
protected

Render value unions.

Pointed to by non-texture elements in the render value information array.

TextureRenderValueContainer kanzi::GlRenderState::m_textureArray
protected

Render texture values, contain textures within the array.

MaterialSharedPtr kanzi::GlRenderState::m_material
protected

Currently attached material.


The documentation for this class was generated from the following file: