kanzi::RenderPass Class Reference

RenderPass is the base class for Kanzi render passes. More...

#include <kanzi/core.ui/graphics3d/render_pass.hpp>

Inheritance diagram for kanzi::RenderPass:
kanzi::Resource kanzi::Object kanzi::MetaObject kanzi::PropertyObject kanzi::BlitRenderPass kanzi::ClearRenderPass kanzi::CompositionTargetRenderPass kanzi::DrawObjectsRenderPass kanzi::LegacyRenderPass kanzi::MaterialSetupRenderPass kanzi::PipelineStateRenderPass kanzi::DrawObjectsWithMaterialRenderPass

Classes

struct  ResourceBinding
 Struct containing resource binding information. More...
 

Public Types

typedef vector< RenderPassSharedPtrChildContainer
 
- 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

RenderPassSharedPtr lookupRenderPass (string_view path)
 Resolve a render pass by path. More...
 
void render (Renderer3D &renderer, TransformedScene3D &transformedScene, CompositionStack &compositionStack)
 Recursively render RenderPass and all of its child render passes. More...
 
void renderMesh (Node3D &node, Morph *morph, Mesh &mesh, unsigned int clusterIndex, MaterialRenderer &materialRenderer)
 Use this function to render a mesh owned by a node using the material renderer that the node owns. More...
 
void addChild (RenderPassSharedPtr childRenderPass)
 Adds a render pass as the last child of the render pass you set. More...
 
void insertChild (size_t index, RenderPassSharedPtr childRenderPass)
 Adds a render pass as a child render pass at given index of the render pass you set. More...
 
void removeChild (RenderPass &childRenderPass)
 Removes a child render pass. More...
 
void removeAllChildren ()
 Removes all child render passes from a render pass. More...
 
RenderPassSharedPtr getParent () const
 Gets the parent of a render pass. More...
 
void setParent (RenderPassSharedPtr parent)
 Sets the parent of a render pass. More...
 
RenderPassSharedPtr getChild (size_t index)
 Gets a child render pass at the given index. More...
 
size_t getChildCount () const
 Returns the number of child render passes. More...
 
ChildContainer::const_iterator beginChildren () const
 Returns an iterator to the beginning of the container of child render passes. More...
 
ChildContainer::const_iterator endChildren () const
 Returns an iterator to the end of the container of child render passes. More...
 
TextureSharedPtr getCompositionResult (Framebuffer::AttachmentPoint attachmentPoint)
 Gets color composition target that was used for rendering. More...
 
size_t getTextureBindingCount () const
 Gets the number of texture bindings. More...
 
ResourceBinding getTextureBinding (size_t index) const
 Gets a texture binding by index. More...
 
void addTextureBinding (AbstractPropertyType propertyType, string_view path, bool fromKzb)
 Adds a texture binding. More...
 
void addTextureBinding (AbstractPropertyType propertyType, string_view path)
 Adds a texture binding. More...
 
bool removeTextureBinding (AbstractPropertyType propertyType)
 Removes the texture binding. More...
 
void removeKzbTextureBindings ()
 Removes the resource bindings loaded from kzb files. More...
 
virtual CompositionRequirements getCompositionRequirements () const
 Queries if a render pass requires a depth buffer. More...
 
void restoreResourcesRecursive ()
 Recursively calls restoreResources for a RenderPass and all its children. More...
 
virtual void restoreResources ()
 Restore resources after suspend. More...
 
virtual void loadFromKZB (const ResourceLoaderThreadContext *threadContext, KzcInputStream *inputStream, const KzuBinaryFileInfo *file) KZ_OVERRIDE
 Resource::loadFromKZB() implementation. More...
 
- Public Member Functions inherited from kanzi::Resource
KzcMemoryManagergetMemoryManager () const
 
 Resource (Domain *domain, string_view name)
 
virtual ~Resource ()
 
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 PropertyTypeEditorInfoSharedPtr makeEditorInfo ()
 
static RenderPassSharedPtr create (Domain *domain, string_view name)
 Create a render pass. More...
 
static ResourceManager::LoadTaskSharedPtr createLoadTask (string_view name, KzbFile *kzbFile, unique_ptr< ReadOnlyMemoryFile > file)
 Factory function for RenderPass Load Task, which loads a RenderPass from a kzb file. More...
 
- 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...
 

Protected Member Functions

 RenderPass (Domain *domain, string_view name)
 Constructor. More...
 
virtual void onLoaded ()
 Override function called by createLoadTask(), after loading render pass. More...
 
void loadChildRenderPassesFromKZB (ResourceManager &resourceManager, KzbMemoryParser &parser)
 Load child render passes from a kzb file. More...
 
void loadProperties (KzbMemoryParser &parser)
 Reimplementation of the loadProperties from parser to accommodate paths in properties. More...
 
kzsError readProperties (struct KzcInputStream *inputStream, const struct KzuBinaryFileInfo *file, ResourceManager *resourceManager)
 Reimplementation of the property reading to accommodate paths in properties. More...
 
kzsError readProperty (struct KzcInputStream *inputStream, const struct KzuBinaryFileInfo *file, ResourceManager *resourceManager)
 Reimplementation of reading a single property to accommodate paths in properties. More...
 
void renderChildren (Renderer3D &renderer, TransformedScene3D &transformedScene, CompositionStack &compositionStack)
 Render all child render passes of a render pass. More...
 
CompositionRequirements combineChildCompositionRequirements (CompositionRequirements requirements) const
 Iterates the children for composition requirements. More...
 
CompositionRequirements getChildCompositionRequirements () const
 Iterates the children for composition requirements. More...
 
virtual void renderOverride (Renderer3D &renderer, TransformedScene3D &transformedScene, CompositionStack &compositionStack)
 Render implementation specific to the RenderPass class. More...
 
virtual void renderMeshOverride (Node3D &node, Morph *morph, Mesh &mesh, unsigned int clusterIndex, MaterialRenderer &materialRenderer)
 Mesh rendering that is specific for a render pass. More...
 
virtual TextureSharedPtr getCompositionResultOverride (Framebuffer::AttachmentPoint attachmentPoint)
 Acquiring of composition target specific to the RenderPass class. More...
 
- Protected Member Functions inherited from kanzi::Resource
virtual void reloadOverride ()
 
virtual void reloadFromKzbOverride (KzcInputStream *inputStream, const KzuBinaryFileInfo *file)
 
virtual void reloadFromKzbOverride (KzbFile &kzbFile, ReadOnlyMemoryFile &file, KzbMemoryParser &parser)
 
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

class LoadTaskNew
 

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

RenderPass is the base class for Kanzi render passes.

Use render passes to perform singular render pass operations in 3D scenes. For example, use a render pass to clear the background, render nodes for a specific object source, set up a composition target, and so on.

Combine render passes into a hierarchy to create the rendering result you want to achieve.

Render pass rendering and execution order

The base RenderPass class does not implement any functionality, but renders its descendant render passes. This is the reason why the base RenderPass class is called Group Render Pass in Kanzi Studio. All other render passes either perform draw operations or set the state for successive render passes. In both cases, they pass the control to their descendant render passes only after they execute their own operations. Keep this in mind when you define your own render passes. See Creating your own render pass.

Render passes that perform draw operations are:

Render passes that set state are:

Kanzi excutes render passes by iterating the tree depth-first. This is similar to how Kanzi iterates nodes when it renders the scene graph. Each render pass first executes itself, then, one at a time, all of its child render passes. Since the child render passes execute themselves, Kanzi executes the full tree starting from a child render pass before it executes the next child render pass. In the same way, the successive Kanzi executes the sibling render passes before it returns the control returns to the parent render pass.

Using textures created with render passes

You can use a render pass to create a texture and then use that texture in other render passes. The texture bindings are resolved on render. For example, you can show on the screen a texture that a CompositionTargetRenderPass creates, with a BlitRenderPass.

Creating render passes

When you create a render pass, the create function calls the constructor, initializes the render pass, and returns the pointer to the render pass. The render pass constructors are protected and only inheriting classes can access them.

For example, to create a Group Render Pass:

// Create a Group Render Pass which you can use to combine different types of render passes to achieve a specific rendering result.
RenderPassSharedPtr renderPass = RenderPass::create(domain, "Group Render Pass");

Render pass hierarchy

You can combine render passes into a hierarchy to create the rendering result you cannot achieve with any single render pass. When you select a render pass for a Scene or a Viewport2D node, you can select either the root render pass or a specific render pass within such hierarchy. If you select a specific render pass within such hierarchy, Kanzi uses only that render pass and its descendants to render the content.

If a render pass is the root of its own tree, it does not have a parent render pass. In the same manner, if a render pass is a leaf render pass, it does not have any child render passes.

To create a render pass hierarchy:

// Create a top-level Group Render Pass to act as root.
RenderPassSharedPtr defaultRenderPass = RenderPass::create(domain, "Group Render Pass");
// Create a Pipeline State Render Pass you can use to set the rendering state, and add it to the Group Render Pass.
PipelineStateRenderPassSharedPtr pipelineStateRenderPass = PipelineStateRenderPass::create(domain, "Pipeline State Render Pass");
defaultRenderPass->addChild(pipelineStateRenderPass);
// Create a Clear Render Pass to do the clearing before rendering, and add it to the Pipeline State Render Pass.
ClearRenderPassSharedPtr clearRenderPass = ClearRenderPass::create(domain, "Clear Render Pass");
pipelineStateRenderPass->addChild(clearRenderPass);
// Create a Draw Objects Render Pass to render all 3D objects after clearing, and add it to the Pipeline State Render Pass.
DrawObjectsRenderPassSharedPtr drawObjectsRenderPass = DrawObjectsRenderPass::create(domain, "Draw Objects Render Pass");
pipelineStateRenderPass->addChild(drawObjectsRenderPass);

To access descendant render passes (child render passes of the current render pass):

// Gets the first descendant (the first child render pass) of a render pass.
RenderPassSharedPtr childRenderPass = groupRenderPass->getChild(0);

To access ascendant render pass (parent render pass of the current render pass):

// Gets the ascendant (the parent render pass) of a render pass.
RenderPassSharedPtr parentRenderPass = pipelineStateRenderPass->getParent();

Creating your own render pass class

If you cannot achieve the rendering result with the render passes that come with Kanzi, you can create your own render pass.

Defining the class

Start creating your own render pass by inheriting from the RenderPass base class. Define metaclass and declare property types in the same way as you would in the Node classes. See Node2D.

To create a simple custom render pass:

class ExampleRenderPass;
typedef shared_ptr<ExampleRenderPass> ExampleRenderPassSharedPtr;
class ExampleRenderPass : public RenderPass
{
public:
static PropertyType<float> PolygonOffsetProperty;
float getPolygonOffset() const
{
return getProperty(PolygonOffsetProperty);
}
void setPolygonOffset(float value)
{
setProperty(PolygonOffsetProperty, value);
}
KZ_METACLASS_BEGIN(ExampleRenderPass, RenderPass, "Kanzi.ExampleRenderPass")
KZ_METACLASS_PROPERTY_TYPE(PolygonOffsetProperty)
static PropertyTypeEditorInfoSharedPtr makeEditorInfo();
static ExampleRenderPassSharedPtr create(Domain* domain, string_view name)
{
ExampleRenderPassSharedPtr renderPass = make_polymorphic_shared_ptr<RenderPass>(new ExampleRenderPass(domain, name));
renderPass->initialize();
return renderPass;
}
protected:
explicit ExampleRenderPass(Domain* domain, string_view name) :
RenderPass(domain, name)
{
}
virtual void renderOverride(Renderer3D& renderer, TransformedScene3D& transformedScene, CompositionStack& compositionStack);
};
PropertyType<float> ExampleRenderPass::PolygonOffsetProperty(kzMakeFixedString("ExampleRenderPass.PolygonOffset"), 1.0f, 0, false,
(
metadata.displayName = "Polygon Offset";
metadata.host = "Kanzi.RenderPass:context,Kanzi.ExampleRenderPass:auto";
metadata.tooltip = "Defines the polygon offset for rendering the children of the render pass.";
));
PropertyTypeEditorInfoSharedPtr ExampleRenderPass::makeEditorInfo()
{
[]() -> PropertyTypeEditorInfo::AttributeDictionary
{
PropertyTypeEditorInfo::AttributeDictionary dict;
dict.displayName = "Example Render Pass";
dict.tooltip = "Use Example Render Pass to set polygon offset for rendering its render pass tree. For example, this can be useful for rendering decals on existing geometry.";
return dict;
}()
));
}

RenderPass override functions

When you need to override the functionality of the RenderPass class, override the renderOverride() virtual method:

void ExampleRenderPass::renderOverride(Renderer3D& renderer, TransformedScene3D& transformedScene, CompositionStack& compositionStack)
{
// Modify state. In this case, set the polygon offset.
// This example does not store the existing polygon offset.
float offset = getProperty(PolygonOffsetProperty);
kzsGlPolygonOffset(1.0f, offset);
// Pass to rendering children.
renderChildren(renderer, transformedScene, compositionStack);
// Restore state.
kzsGlPolygonOffset(0.0f, 0.0f);
}

The RenderPass base class loads all render pass properties that you define in your render pass. However, if you need to implement custom loading for your render pass, you can override the #loadFromKzb() method.

Member Typedef Documentation

Constructor & Destructor Documentation

kanzi::RenderPass::RenderPass ( Domain domain,
string_view  name 
)
explicitprotected

Constructor.

Member Function Documentation

static PropertyTypeEditorInfoSharedPtr kanzi::RenderPass::makeEditorInfo ( )
static
static RenderPassSharedPtr kanzi::RenderPass::create ( Domain domain,
string_view  name 
)
static

Create a render pass.

Parameters
domainThe domain to use.
nameThe name for the render pass.
RenderPassSharedPtr kanzi::RenderPass::lookupRenderPass ( string_view  path)

Resolve a render pass by path.

Parameters
pathThe relative path to the render pass.
Returns
The render pass, if none found, 0.
void kanzi::RenderPass::render ( Renderer3D renderer,
TransformedScene3D transformedScene,
CompositionStack compositionStack 
)

Recursively render RenderPass and all of its child render passes.

Calls renderOverride that you can implement by inheriting classes.

Parameters
rendererThe renderer to use.
transformedSceneThe transformed scene to render.
compositionStackThe composition stack to use.
void kanzi::RenderPass::renderMesh ( Node3D node,
Morph morph,
Mesh mesh,
unsigned int  clusterIndex,
MaterialRenderer materialRenderer 
)

Use this function to render a mesh owned by a node using the material renderer that the node owns.

Parameters
nodeNode being rendered.
morphMorph, if applicable.
meshMesh being rendered.
clusterIndexCluster being drawn.
materialRendererMaterial renderer provided to use for rendering the mesh.
void kanzi::RenderPass::addChild ( RenderPassSharedPtr  childRenderPass)

Adds a render pass as the last child of the render pass you set.

Parameters
childRenderPassThe render pass to add.
void kanzi::RenderPass::insertChild ( size_t  index,
RenderPassSharedPtr  childRenderPass 
)

Adds a render pass as a child render pass at given index of the render pass you set.

Parameters
indexThe index at which to insert the child render pass.
childRenderPassThe render pass to add.
void kanzi::RenderPass::removeChild ( RenderPass childRenderPass)

Removes a child render pass.

If the render pass is not a child of this render pass, silently does nothing.

Parameters
childRenderPassThe render pass to remove.
void kanzi::RenderPass::removeAllChildren ( )

Removes all child render passes from a render pass.

RenderPassSharedPtr kanzi::RenderPass::getParent ( ) const
inline

Gets the parent of a render pass.

Returns
Shared pointer to the parent render pass of a render pass, an empty shared pointer if the render pass does not have a parent.
void kanzi::RenderPass::setParent ( RenderPassSharedPtr  parent)
inline

Sets the parent of a render pass.

Parameters
parentThe parent render pass.
RenderPassSharedPtr kanzi::RenderPass::getChild ( size_t  index)
inline

Gets a child render pass at the given index.

Throws an error if the index is invalid.

Parameters
indexThe index of the child render pass that you want get.
Returns
Shared pointer to the child render pass at the given index.
size_t kanzi::RenderPass::getChildCount ( ) const
inline

Returns the number of child render passes.

ChildContainer::const_iterator kanzi::RenderPass::beginChildren ( ) const
inline

Returns an iterator to the beginning of the container of child render passes.

ChildContainer::const_iterator kanzi::RenderPass::endChildren ( ) const
inline

Returns an iterator to the end of the container of child render passes.

TextureSharedPtr kanzi::RenderPass::getCompositionResult ( Framebuffer::AttachmentPoint  attachmentPoint)
inline

Gets color composition target that was used for rendering.

Internally calls the getCompositionResultOverride() method. Only returns non-empty shared pointer values by render passes actually using composition targets.

Parameters
attachmentPointThe attachment point of the composition result to acquire.
Returns
Texture shared pointer, may be empty.
size_t kanzi::RenderPass::getTextureBindingCount ( ) const
inline

Gets the number of texture bindings.

Returns
The number of texture bindings in the render pass.
ResourceBinding kanzi::RenderPass::getTextureBinding ( size_t  index) const
inline

Gets a texture binding by index.

Returns
The texture binding at the given index.
void kanzi::RenderPass::addTextureBinding ( AbstractPropertyType  propertyType,
string_view  path,
bool  fromKzb 
)

Adds a texture binding.

Use texture bindings to map the composition result values from other render passes to property values.

Path of the texture binding describes the relative path to another render pass from which the composition is acquired. After the relative path, an optional dot followed by an attachment point name can be specified. Valid attachment points accepted are:

  • "Color0", "Color1", "Color2" or "Color3"
  • "Depth" Not specifying anything for the attachment point name is the same as specifying ".Color0" for the first color attachment point.
Parameters
propertyTypeThe property type to map to.
pathThe path to the render pass to which you want to add texture binding.
fromKzbIndicates whether the resource binding is loaded from a kzb file.
void kanzi::RenderPass::addTextureBinding ( AbstractPropertyType  propertyType,
string_view  path 
)
inline

Adds a texture binding.

Use texture bindings to map the composition result values from other render passes to property values. The binding added is set to not come from a kzb file.

Parameters
propertyTypeThe property type to map to.
pathThe path to the render pass to which you want to add texture binding.
bool kanzi::RenderPass::removeTextureBinding ( AbstractPropertyType  propertyType)

Removes the texture binding.

Parameters
propertyTypeThe property type for which you want to remove the binding.
Returns
True when the function finds a binding and removes it, otherwise false.
void kanzi::RenderPass::removeKzbTextureBindings ( )

Removes the resource bindings loaded from kzb files.

This function is analogous to removeKzbProperties().

virtual CompositionRequirements kanzi::RenderPass::getCompositionRequirements ( ) const
virtual

Queries if a render pass requires a depth buffer.

Use this function to determine the depth buffer requirement for automatically created render targets.

Parameters
allowDepthClearOutput parameter, true if node can clear depth buffer.
requiresDepthOutput parameter, true if node requires composition target to have depth buffer.

Reimplemented in kanzi::PipelineStateRenderPass, kanzi::CompositionTargetRenderPass, kanzi::LegacyRenderPass, and kanzi::ClearRenderPass.

void kanzi::RenderPass::restoreResourcesRecursive ( )

Recursively calls restoreResources for a RenderPass and all its children.

Calls happen in depth-first order.

virtual void kanzi::RenderPass::restoreResources ( )
virtual

Restore resources after suspend.

Inheriting classes should call parent class methods.

Reimplemented in kanzi::CompositionTargetRenderPass.

virtual void kanzi::RenderPass::loadFromKZB ( const ResourceLoaderThreadContext threadContext,
KzcInputStream inputStream,
const KzuBinaryFileInfo file 
)
virtual

Resource::loadFromKZB() implementation.

Legacy kzb loading.

Reimplemented from kanzi::Resource.

Reimplemented in kanzi::LegacyRenderPass.

static ResourceManager::LoadTaskSharedPtr kanzi::RenderPass::createLoadTask ( string_view  name,
KzbFile kzbFile,
unique_ptr< ReadOnlyMemoryFile file 
)
static

Factory function for RenderPass Load Task, which loads a RenderPass from a kzb file.

Parameters
nameName of the RenderPass that you want to load.
kzbFilePointer to the instance of KzbFile, which holds the information about the kzb file.
filePointer to the instance of ReadOnlyMemoryFile, which wraps the kzb file.
Returns
Shared pointer to the created load task.
virtual void kanzi::RenderPass::onLoaded ( )
inlineprotectedvirtual

Override function called by createLoadTask(), after loading render pass.

Allows render pass type specific post loading implementation.

Reimplemented in kanzi::LegacyRenderPass.

void kanzi::RenderPass::loadChildRenderPassesFromKZB ( ResourceManager resourceManager,
KzbMemoryParser parser 
)
protected

Load child render passes from a kzb file.

Kanzi calls this function in individual loadFromKZB implementations.

Parameters
resourceManagerThe resource manager for accessing the child render passes.
parserThe file parser to use for loading.
void kanzi::RenderPass::loadProperties ( KzbMemoryParser parser)
protected

Reimplementation of the loadProperties from parser to accommodate paths in properties.

Parameters
parserThe parser to use.
kzsError kanzi::RenderPass::readProperties ( struct KzcInputStream inputStream,
const struct KzuBinaryFileInfo file,
ResourceManager resourceManager 
)
protected

Reimplementation of the property reading to accommodate paths in properties.

Previous version of the loader.

kzsError kanzi::RenderPass::readProperty ( struct KzcInputStream inputStream,
const struct KzuBinaryFileInfo file,
ResourceManager resourceManager 
)
protected

Reimplementation of reading a single property to accommodate paths in properties.

Previous version of the loader.

void kanzi::RenderPass::renderChildren ( Renderer3D renderer,
TransformedScene3D transformedScene,
CompositionStack compositionStack 
)
protected

Render all child render passes of a render pass.

Parameters
rendererThe renderer to use.
transformedSceneThe transformed scene to render.
compositionStackThe composition stack to use.
CompositionRequirements kanzi::RenderPass::combineChildCompositionRequirements ( CompositionRequirements  requirements) const
protected

Iterates the children for composition requirements.

The requirements for children are merged with the requirements passed.

Parameters
requirementsInitial requirements.
Returns
Requirements combined with all children.
CompositionRequirements kanzi::RenderPass::getChildCompositionRequirements ( ) const
inlineprotected

Iterates the children for composition requirements.

Usually the user should call combineChildCompositionRequirements() instead. This function is used if the render pass has no requirements of its own.

Returns
Requirements combined with all children.
virtual void kanzi::RenderPass::renderOverride ( Renderer3D renderer,
TransformedScene3D transformedScene,
CompositionStack compositionStack 
)
protectedvirtual

Render implementation specific to the RenderPass class.

The default implementation renders all child render passes, but does nothing else. For this reason the base render pass class is considered as a Group Render Pass.

Parameters
rendererThe renderer to use.
transformedSceneThe transformed scene to render.
compositionStackThe composition stack to use.

Reimplemented in kanzi::PipelineStateRenderPass, kanzi::CompositionTargetRenderPass, kanzi::LegacyRenderPass, kanzi::BlitRenderPass, kanzi::DrawObjectsRenderPass, kanzi::ClearRenderPass, kanzi::DrawObjectsWithMaterialRenderPass, and kanzi::MaterialSetupRenderPass.

virtual void kanzi::RenderPass::renderMeshOverride ( Node3D node,
Morph morph,
Mesh mesh,
unsigned int  clusterIndex,
MaterialRenderer materialRenderer 
)
protectedvirtual

Mesh rendering that is specific for a render pass.

Most of the render passes do not need to override this, because they do not render nodes.

Parameters
nodeNode being rendered.
morphMorph, if applicable.
meshMesh being rendered.
clusterIndexCluster being drawn.
materialRendererMaterial renderer provided to use for rendering the mesh.

Reimplemented in kanzi::LegacyRenderPass, kanzi::DrawObjectsRenderPass, and kanzi::DrawObjectsWithMaterialRenderPass.

virtual TextureSharedPtr kanzi::RenderPass::getCompositionResultOverride ( Framebuffer::AttachmentPoint  attachmentPoint)
inlineprotectedvirtual

Acquiring of composition target specific to the RenderPass class.

The default implementation returns an empty shared pointer.

Parameters
attachmentPointWhich composition result to acquire?
Returns
Shared pointer to the resulting texture.

Reimplemented in kanzi::CompositionTargetRenderPass.

Friends And Related Function Documentation

friend class LoadTaskNew
friend

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