LibCarna Version 3.4.0
Loading...
Searching...
No Matches
FrameRendererHelper.hpp
Go to the documentation of this file.
1/*
2 * Copyright (C) 2010 - 2016 Leonid Kostrykin
3 *
4 * Chair of Medical Engineering (mediTEC)
5 * RWTH Aachen University
6 * Pauwelsstr. 20
7 * 52074 Aachen
8 * Germany
9 *
10 *
11 * Copyright (C) 2021 - 2025 Leonid Kostrykin
12 *
13 */
14
15#ifndef FRAMERENDERERHELPER_H_6014714286
16#define FRAMERENDERERHELPER_H_6014714286
17
18#include <LibCarna/LibCarna.hpp>
19#include <LibCarna/base/Log.hpp>
27#include <set>
28
34namespace LibCarna
35{
36
37namespace helpers
38{
39
40
41
42// ----------------------------------------------------------------------------------
43// DefaultRenderStageOrder
44// ----------------------------------------------------------------------------------
45
53{
54
55public:
56
60 bool operator()( const base::RenderStage* x, const base::RenderStage* y ) const;
61
62}; // DefaultRenderStageOrder
63
64
65
66// ----------------------------------------------------------------------------------
67// FrameRendererHelper
68// ----------------------------------------------------------------------------------
69
79template< typename RenderStageOrder >
81{
82
84
85 std::set< base::RenderStage*, RenderStageOrder > stages;
86
87public:
88
93
98
104
109
113 void reset();
114
119 void commit( bool clear = true );
120
121}; // FrameRendererHelper
122
123
124template< typename RenderStageOrder >
129
130
131template< typename RenderStageOrder >
136
137
138template< typename RenderStageOrder >
140{
141 std::for_each( stages.begin(), stages.end(), std::default_delete< base::RenderStage >() );
142 stages.clear();
143}
144
145
146template< typename RenderStageOrder >
148{
149 if( clear )
150 {
151 renderer.clearStages();
152 }
153 presets::MeshColorCodingStage* mccs = nullptr;
154 presets::OccludedRenderingStage* occluded = nullptr;
155 unsigned int registeredMeshColorCodingStages = 0;
156 unsigned int enabledOccludedStages = 0;
157 for( auto stageItr = stages.begin(); stageItr != stages.end(); ++stageItr )
158 {
159 base::RenderStage* const rs = *stageItr;
160 renderer.appendStage( rs );
161
162 if( mccs == nullptr )
163 {
164 mccs = dynamic_cast< presets::MeshColorCodingStage* >( rs );
165 }
166 if( occluded == nullptr )
167 {
168 occluded = dynamic_cast< presets::OccludedRenderingStage* >( rs );
169 }
170
171 base::MeshRenderingMixin* const meshRenderer = dynamic_cast< base::MeshRenderingMixin* >( rs );
172 if( meshRenderer != nullptr && mccs != nullptr )
173 {
174 mccs->putGeometryType( meshRenderer->geometryType, meshRenderer->DEFAULT_ROLE_MESH );
175 mccs->enableMaterials( meshRenderer->geometryType, meshRenderer->DEFAULT_ROLE_MATERIAL );
176 ++registeredMeshColorCodingStages;
177 }
178 if( meshRenderer != nullptr && occluded != nullptr )
179 {
180 occluded->enableStage( *rs );
181 ++enabledOccludedStages;
182 }
183 }
185 , "FrameRendererHelper registered "
186 + base::text::lexical_cast< std::string >( registeredMeshColorCodingStages )
187 + " stage(s) for color coding." );
189 , "FrameRendererHelper enabled "
190 + base::text::lexical_cast< std::string >( enabledOccludedStages )
191 + " stage(s) for occluded rendering." );
192 stages.clear();
193}
194
195
196template< typename RenderStageOrder >
198{
199 stages.insert( rs );
200 return *this;
201}
202
203
204
205} // namespace LibCarna :: helpers
206
207} // namespace LibCarna
208
209
210
211#endif // FRAMERENDERERHELPER_H_6014714286
Defines LibCarna::base::GLContext.
Contains forward-declarations.
Defines LibCarna::base::Log.
Defines LibCarna::presets::MeshColorCodingStage.
Defines LibCarna::base::MeshRenderingStage.
Defines LibCarna::presets::OccludedRenderingStage.
Defines LibCarna::base::RenderStageSequence.
Defines LibCarna::base::RenderStage.
@ debug
Indicates messages that might be of interest when searching bugs.
Definition Log.hpp:91
Defines MeshRenderingStage class template instance invariants.
static const unsigned int DEFAULT_ROLE_MATERIAL
Identifies the Material object that MeshRenderingStage uses for rendering.
const unsigned int geometryType
Holds the geometry type rendered by this MeshRenderingStage.
static const unsigned int DEFAULT_ROLE_MESH
Identifies the Mesh 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.
static Log & instance()
Returns the only instance from class InstanceType.
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< RenderStageOrder > & operator<<(base::RenderStage *rs)
Takes possession of rs and adds it to the renderer when commit is invoked.
base::RenderStageSequence & renderer
References the configured renderer.
FrameRendererHelper(base::RenderStageSequence &renderer)
Instantiates helper for renderer.
void commit(bool clear=true)
Commits recorded changes to the associated renderer. Removes all previosly committed stages if clear ...
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
Marks the class that it is placed in as non-copyable.
Defines LibCarna::base::text.