12 #ifndef GEOMETRYSTAGE_H_6014714286 13 #define GEOMETRYSTAGE_H_6014714286 58 template<
typename RenderableCompare >
65 std::size_t passesRendered;
66 std::map< GeometryFeature*, VideoResource* > acquiredFeatures;
111 template<
typename GeometryFeatureType >
112 typename GeometryFeatureType::ManagedInterface&
videoResource( GeometryFeatureType& geometryFeature )
const;
116 template<
typename GeometryFeatureType >
117 const typename GeometryFeatureType::ManagedInterface&
videoResource(
const GeometryFeatureType& geometryFeature )
const;
151 template<
typename RenderableCompare >
154 , passesRendered( 0 )
155 ,
rq( geometryType, geometryTypeMask )
156 , geometryType( geometryType )
157 , geometryTypeMask( geometryTypeMask )
162 template<
typename RenderableCompare >
166 std::for_each( acquiredFeatures.begin(), acquiredFeatures.end(),
167 [&](
const std::pair< GeometryFeature*, VideoResource* >& entry )
169 if( entry.second !=
nullptr )
178 template<
typename RenderableCompare >
181 if( isInitialized() )
183 renderer().glContext().makeCurrent();
188 template<
typename RenderableCompare >
191 RenderStage::prepareFrame( root );
193 this->passesRendered = 0;
197 template<
typename RenderableCompare >
200 return passesRendered;
204 template<
typename RenderableCompare >
207 rq.build( root, viewTransform );
211 template<
typename RenderableCompare >
218 template<
typename RenderableCompare >
221 rq.updateModelViewTransforms( viewTransform );
225 template<
typename RenderableCompare >
228 const bool isFirstPass = passesRendered == 0;
234 buildRenderQueues( *root, viewTransform );
238 rewindRenderQueues();
239 if( isViewTransformFixed() )
241 updateRenderQueues( viewTransform );
245 std::set< GeometryFeature* > usedFeatures;
246 while( !rq.isEmpty() )
255 usedFeatures.insert( &gf );
259 if( acquiredFeatures.find( &gf ) == acquiredFeatures.end() )
262 acquiredFeatures[ &gf ] = vr;
267 render( renderable );
273 for(
auto itr = acquiredFeatures.begin(); itr != acquiredFeatures.end(); )
275 if( usedFeatures.find( itr->first ) == usedFeatures.end() )
277 if( itr->second !=
nullptr )
281 acquiredFeatures.erase( itr++ );
292 template<
typename RenderableCompare >
293 template<
typename GeometryFeatureType >
297 const auto itr = acquiredFeatures.find( &gf );
299 return static_cast< typename GeometryFeatureType::ManagedInterface&
>( *itr->second );
303 template<
typename RenderableCompare >
304 template<
typename GeometryFeatureType >
308 return videoResource( const_cast< GeometryFeatureType& >( gf ) );
317 #endif // GEOMETRYSTAGE_H_6014714286 Defines Carna::base::math namespace and CARNA_FOR_VECTOR3UI.
virtual void rewindRenderQueues()
Rewinds the rendering queues of this stage.
const unsigned int geometryTypeMask
Renders such geometries whose type AND-linked with this equals geometryType.
void activateGLContext() const
Ensures that the OpenGL context of the hosting Carna::base::FrameRenderer is the current one...
virtual void buildRenderQueues(Node &root, const math::Matrix4f &viewTransform)
Builds the rendering queues of this stage.
RenderQueue< RenderableCompare > rq
Holds the predefined rendering queue of this rendering stage.
std::size_t renderedPassesCount() const
Tells the number of passes rendered so far since the beginning of the current frame.
Partially implements a rendering stage that uses at least one render queue for rendering geometry fro...
Defines Carna::base::GeometryFeature.
Defines Carna::base::FrameRenderer.
Gathers renderable geometry nodes from scene graph and provides those in a particular order...
Represents "components" that are aggregated by Geometry objects. Closer description is given here...
virtual ManagedInterface * acquireVideoResource()=0
Acquires the video resources from this GeometryFeature by returning new instance of a class derived f...
Represents an acquisition of the video resources from a particular GeometryFeature. This acquisition realizes the RAII idiom.
virtual void renderPass(const math::Matrix4f &viewTransform, RenderTask &rt, const Viewport &vp) override
Called once per pass.
Defines the inner node of a scene graph. Implements a spatial scene element that is allowed to have c...
Invokes the rendering stages of the frame renderer successively.
void visitFeatures(const std::function< void(GeometryFeature &gf, unsigned int role) > &visit) const
Invokes visit once on each attached geometry feature.
virtual ~GeometryStage()
Releases acquired video resources.
Defines Carna::base::RenderQueue.
virtual void prepareFrame(Node &root) override
Called once before each frame.
Eigen::Matrix< float, 4, 4, Eigen::ColMajor > Matrix4f
Defines matrix.
const Geometry & geometry() const
References the geometry node.
Base abstract class of each rendering stage. Refer to the documentation of the rendering process...
Defines a rendering viewport. The viewport is a property of the current OpenGL context.
GeometryFeatureType::ManagedInterface & videoResource(GeometryFeatureType &geometryFeature) const
Interfaces the geometryFeature video resources that were acquired by this rendering stage...
const unsigned int geometryType
Renders such geometries whose type AND-linked with geometryTypeMask equals this.
Represents a Geometry object that has been queued into a RenderQueue. The object's model-view transfo...
GeometryStage(unsigned int geometryType, unsigned int geometryTypeMask=RenderQueue< RenderableCompare >::EXACT_MATCH_GEOMETRY_TYPE_MASK)
Instantiates s.t. the predefined rendering queue enqueues such Carna::base::Geometry scene graph node...
virtual void updateRenderQueues(const math::Matrix4f &viewTransform)
Recomputes the model-view transforms of the renderables enqueued by this stage.
#define CARNA_ASSERT(expression)
If the given expression is false, a break point is raised in debug mode and an AssertionFailure throw...
Defines Carna::base::RenderStage.
virtual void render(const Renderable &renderable)=0
Renders the renderable.