Carna Version 3.3.3
Loading...
Searching...
No Matches
FrameRendererHelper.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2010 - 2015 Leonid Kostrykin
3 *
4 * Chair of Medical Engineering (mediTEC)
5 * RWTH Aachen University
6 * Pauwelsstr. 20
7 * 52074 Aachen
8 * Germany
9 *
10 */
11
12#ifndef FRAMERENDERERHELPER_H_6014714286
13#define FRAMERENDERERHELPER_H_6014714286
14
15#include <Carna/Carna.h>
16#include <Carna/base/Log.h>
17#include <Carna/base/text.h>
24#include <set>
25
30namespace Carna
31{
32
33namespace helpers
34{
35
36
37
38// ----------------------------------------------------------------------------------
39// DefaultRenderStageOrder
40// ----------------------------------------------------------------------------------
41
49class CARNA_LIB DefaultRenderStageOrder : std::binary_function< base::RenderStage*, base::RenderStage*, bool >
50{
51
52public:
53
57 bool operator()( const base::RenderStage* x, const base::RenderStage* y ) const;
58
59}; // DefaultRenderStageOrder
60
61
62
63// ----------------------------------------------------------------------------------
64// FrameRendererHelper
65// ----------------------------------------------------------------------------------
66
77template< typename RenderStageOrder >
79{
80
82
83 std::set< base::RenderStage*, RenderStageOrder > stages;
84
85public:
86
91
96
102
107
111 void reset();
112
117 void commit( bool clear = true );
118
119}; // FrameRendererHelper
120
121
122template< typename RenderStageOrder >
127
128
129template< typename RenderStageOrder >
134
135
136template< typename RenderStageOrder >
138{
139 std::for_each( stages.begin(), stages.end(), std::default_delete< base::RenderStage >() );
140 stages.clear();
141}
142
143
144template< typename RenderStageOrder >
146{
147 if( clear )
148 {
149 renderer.clearStages();
150 }
151 presets::MeshColorCodingStage* mccs = nullptr;
152 presets::OccludedRenderingStage* occluded = nullptr;
153 unsigned int registeredMeshColorCodingStages = 0;
154 unsigned int enabledOccludedStages = 0;
155 for( auto stageItr = stages.begin(); stageItr != stages.end(); ++stageItr )
156 {
157 base::RenderStage* const rs = *stageItr;
158 renderer.appendStage( rs );
159
160 if( mccs == nullptr )
161 {
162 mccs = dynamic_cast< presets::MeshColorCodingStage* >( rs );
163 }
164 if( occluded == nullptr )
165 {
166 occluded = dynamic_cast< presets::OccludedRenderingStage* >( rs );
167 }
168
169 base::MeshRenderingStageBase* const meshRenderer = dynamic_cast< base::MeshRenderingStageBase* >( rs );
170 if( meshRenderer != nullptr && mccs != nullptr )
171 {
172 mccs->putGeometryType( meshRenderer->geometryType, meshRenderer->ROLE_DEFAULT_MESH );
173 mccs->enableMaterials( meshRenderer->geometryType, meshRenderer->ROLE_DEFAULT_MATERIAL );
174 ++registeredMeshColorCodingStages;
175 }
176 if( meshRenderer != nullptr && occluded != nullptr )
177 {
178 occluded->enableStage( *rs );
179 ++enabledOccludedStages;
180 }
181 }
183 , "FrameRendererHelper registered "
184 + base::text::lexical_cast< std::string >( registeredMeshColorCodingStages )
185 + " stage(s) for color coding." );
187 , "FrameRendererHelper enabled "
188 + base::text::lexical_cast< std::string >( enabledOccludedStages )
189 + " stage(s) for occluded rendering." );
190 stages.clear();
191}
192
193
194template< typename RenderStageOrder >
196{
197 stages.insert( rs );
198 return *this;
199}
200
201
202
203} // namespace Carna :: helpers
204
205} // namespace Carna
206
207
208
209#endif // FRAMERENDERERHELPER_H_6014714286
Defines Carna::base::GLContext.
Defines Carna::base::Log.
Defines Carna::presets::MeshColorCodingStage.
Defines Carna::base::MeshRenderingStage.
Defines Carna::presets::OccludedRenderingStage.
Defines Carna::base::RenderStageSequence.
Defines Carna::base::RenderStage.
@ debug
Indicates messages that might be of interest when searching bugs.
Definition Log.h:88
Defines MeshRenderingStage class template instance invariants.
static const unsigned int ROLE_DEFAULT_MESH
Identifies the Mesh object that MeshRenderingStage uses for rendering.
const unsigned int geometryType
Holds the geometry type rendered by this MeshRenderingStage.
static const unsigned int ROLE_DEFAULT_MATERIAL
Identifies the Material object that MeshRenderingStage uses for rendering.
Represents a rendering stages sequence.
Base abstract class of each rendering stage. Refer to the documentation of the rendering process.
Definition RenderStage.h:43
static Log & instance()
Returns the only instance from class InstanceType.
Definition Singleton.h:109
Defines default rendering stages order used by FrameRendererHelper.
bool operator()(const base::RenderStage *x, const base::RenderStage *y) const
Compares x to y.
Adds rendering stages to a base::FrameRenderer object according to RenderStageOrder.
FrameRendererHelper(base::RenderStageSequence &renderer)
Instantiates helper for renderer.
FrameRendererHelper< RenderStageOrder > & operator<<(base::RenderStage *rs)
Takes possession of rs and adds it to the renderer when commit is invoked.
void commit(bool clear=true)
Commits recorded changes to the associated renderer. Removes all previosly committed stages if clear ...
base::RenderStageSequence & renderer
References the configured renderer.
void reset()
Resets changes that have been made since the last invocation of commit.
Implements a simple interface for mapping frame coordinates to base::Mesh objects.
void enableMaterials(unsigned int geometryType, unsigned int materialRole)
Enables support for materials if geometryType has been activated or will be activated later....
void putGeometryType(unsigned int geometryType, unsigned int meshRole)
Activates geometryType. Meshes with meshRole attached to geometry nodes with geometryType will be pro...
Renders geometry that is actually depth-occluded. The occluded geometry is rendered with reduced opac...
void enableStage(const base::RenderStage &rs)
Enables rs in .
#define NON_COPYABLE
Features class it is placed in as non-copyable.
Defines Carna::base::text.