RenderPass is the base class for Kanzi render passes. More...
#include <kanzi/core.ui/graphics3d/render_pass.hpp>
Classes | |
struct | ResourceBinding |
Struct containing resource binding information. More... | |
Public Types | |
typedef vector< RenderPassSharedPtr > | ChildContainer |
![]() | |
typedef intrusive_ptr< AbstractPropertyTypeDescriptor::PropertyStorage > | PropertyStoragePtr |
typedef vector< PropertyStoragePtr > | PropertyStorageContainer |
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... | |
![]() | |
KzcMemoryManager * | getMemoryManager () 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... | |
![]() | |
Object (Domain *domain) | |
virtual | ~Object () |
Domain * | getDomain () const |
Returns the domain the object belongs to. More... | |
KzuTaskScheduler * | getTaskScheduler () const |
Returns the task scheduler of the object. More... | |
KzuMessageDispatcher * | getMessageDispatcher () const |
Returns the message dispatcher of the object. More... | |
ResourceManager * | getResourceManager () const |
Returns the resource manager of the object. More... | |
virtual const Metaclass * | getDynamicMetaclass () 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... | |
![]() | |
virtual | ~MetaObject () |
bool | isTypeOf (const Metaclass *objectType) const |
Determines if the type of this object is the given type or derived from it. More... | |
![]() | |
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 const Metaclass * | getStaticMetaclass () |
Returns the metaclass of Object class. More... | |
static PropertyTypeEditorInfoSharedPtr | makeEditorInfo () |
Default implementation that returns empty editor info. More... | |
![]() | |
static const Metaclass * | getStaticMetaclass () |
Returns the metaclass of Object class. More... | |
static PropertyTypeEditorInfoSharedPtr | makeEditorInfo () |
Default implementation that returns empty editor info. More... | |
Friends | |
class | LoadTaskNew |
Additional Inherited Members | |
![]() | |
typedef vector< AppliedStyleEntrySharedPtr > | AppliedStyleContainer |
Applied style container. More... | |
![]() | |
AppliedStyleContainer | m_appliedStyles |
Listing of applied styles applied to this object. More... | |
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.
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.
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.
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:
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:
To access descendant render passes (child render passes of the current render pass):
To access ascendant render pass (parent render pass of the current render pass):
If you cannot achieve the rendering result with the render passes that come with Kanzi, you can create your own render pass.
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:
When you need to override the functionality of the RenderPass class, override the renderOverride() virtual method:
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.
typedef vector<RenderPassSharedPtr> kanzi::RenderPass::ChildContainer |
|
explicitprotected |
Constructor.
|
static |
|
static |
Create a render pass.
domain | The domain to use. |
name | The name for the render pass. |
RenderPassSharedPtr kanzi::RenderPass::lookupRenderPass | ( | string_view | path | ) |
Resolve a render pass by path.
path | The relative path to the render pass. |
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.
renderer | The renderer to use. |
transformedScene | The transformed scene to render. |
compositionStack | The composition stack to use. |
void kanzi::RenderPass::renderMesh | ( | Node3D & | node, |
Morph * | morph, | ||
Mesh & | mesh, | ||
unsigned int | clusterIndex, | ||
MaterialRenderer & | materialRenderer | ||
) |
void kanzi::RenderPass::addChild | ( | RenderPassSharedPtr | childRenderPass | ) |
Adds a render pass as the last child of the render pass you set.
childRenderPass | The 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.
index | The index at which to insert the child render pass. |
childRenderPass | The 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.
childRenderPass | The render pass to remove. |
void kanzi::RenderPass::removeAllChildren | ( | ) |
Removes all child render passes from a render pass.
|
inline |
Gets the parent of a render pass.
|
inline |
Sets the parent of a render pass.
parent | The parent render pass. |
|
inline |
Gets a child render pass at the given index.
Throws an error if the index is invalid.
index | The index of the child render pass that you want get. |
|
inline |
Returns the number of child render passes.
|
inline |
Returns an iterator to the beginning of the container of child render passes.
|
inline |
Returns an iterator to the end of the container of child render passes.
|
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.
attachmentPoint | The attachment point of the composition result to acquire. |
|
inline |
Gets the number of texture bindings.
|
inline |
Gets a texture binding by 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:
propertyType | The property type to map to. |
path | The path to the render pass to which you want to add texture binding. |
fromKzb | Indicates whether the resource binding is loaded from a kzb file. |
|
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.
propertyType | The property type to map to. |
path | The path to the render pass to which you want to add texture binding. |
bool kanzi::RenderPass::removeTextureBinding | ( | AbstractPropertyType | propertyType | ) |
Removes the texture binding.
propertyType | The property type for which you want to remove the binding. |
void kanzi::RenderPass::removeKzbTextureBindings | ( | ) |
Removes the resource bindings loaded from kzb files.
This function is analogous to removeKzbProperties().
|
virtual |
Queries if a render pass requires a depth buffer.
Use this function to determine the depth buffer requirement for automatically created render targets.
allowDepthClear | Output parameter, true if node can clear depth buffer. |
requiresDepth | Output 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 |
Restore resources after suspend.
Inheriting classes should call parent class methods.
Reimplemented in kanzi::CompositionTargetRenderPass.
|
virtual |
Resource::loadFromKZB() implementation.
Legacy kzb loading.
Reimplemented from kanzi::Resource.
Reimplemented in kanzi::LegacyRenderPass.
|
static |
Factory function for RenderPass Load Task, which loads a RenderPass from a kzb file.
name | Name of the RenderPass that you want to load. |
kzbFile | Pointer to the instance of KzbFile, which holds the information about the kzb file. |
file | Pointer to the instance of ReadOnlyMemoryFile, which wraps the kzb file. |
|
inlineprotectedvirtual |
Override function called by createLoadTask(), after loading render pass.
Allows render pass type specific post loading implementation.
Reimplemented in kanzi::LegacyRenderPass.
|
protected |
Load child render passes from a kzb file.
Kanzi calls this function in individual loadFromKZB implementations.
resourceManager | The resource manager for accessing the child render passes. |
parser | The file parser to use for loading. |
|
protected |
Reimplementation of the loadProperties from parser to accommodate paths in properties.
parser | The parser to use. |
|
protected |
Reimplementation of the property reading to accommodate paths in properties.
Previous version of the loader.
|
protected |
Reimplementation of reading a single property to accommodate paths in properties.
Previous version of the loader.
|
protected |
Render all child render passes of a render pass.
renderer | The renderer to use. |
transformedScene | The transformed scene to render. |
compositionStack | The composition stack to use. |
|
protected |
Iterates the children for composition requirements.
The requirements for children are merged with the requirements passed.
requirements | Initial requirements. |
|
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.
|
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.
renderer | The renderer to use. |
transformedScene | The transformed scene to render. |
compositionStack | The composition stack to use. |
Reimplemented in kanzi::PipelineStateRenderPass, kanzi::CompositionTargetRenderPass, kanzi::LegacyRenderPass, kanzi::BlitRenderPass, kanzi::DrawObjectsRenderPass, kanzi::ClearRenderPass, kanzi::DrawObjectsWithMaterialRenderPass, and kanzi::MaterialSetupRenderPass.
|
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.
node | Node being rendered. |
morph | Morph, if applicable. |
mesh | Mesh being rendered. |
clusterIndex | Cluster being drawn. |
materialRenderer | Material renderer provided to use for rendering the mesh. |
Reimplemented in kanzi::LegacyRenderPass, kanzi::DrawObjectsRenderPass, and kanzi::DrawObjectsWithMaterialRenderPass.
|
inlineprotectedvirtual |
Acquiring of composition target specific to the RenderPass class.
The default implementation returns an empty shared pointer.
attachmentPoint | Which composition result to acquire? |
Reimplemented in kanzi::CompositionTargetRenderPass.
|
friend |