15#ifndef GEOMETRYSTAGE_H_6014714286
16#define GEOMETRYSTAGE_H_6014714286
61template<
typename RenderableCompare >
68 std::size_t passesRendered;
69 std::map< GeometryFeature*, VideoResource* > acquiredFeatures;
114 template<
typename GeometryFeatureType >
119 template<
typename GeometryFeatureType >
154template<
typename RenderableCompare >
157 , passesRendered( 0 )
158 , rq( geometryType, geometryTypeMask )
159 , geometryType( geometryType )
160 , geometryTypeMask( geometryTypeMask )
165template<
typename RenderableCompare >
169 std::for_each( acquiredFeatures.begin(), acquiredFeatures.end(),
170 [&](
const std::pair< GeometryFeature*, VideoResource* >&
entry )
172 if( entry.second != nullptr )
181template<
typename RenderableCompare >
184 if( isInitialized() )
186 renderer().glContext().makeCurrent();
191template<
typename RenderableCompare >
194 RenderStage::prepareFrame( root );
196 this->passesRendered = 0;
200template<
typename RenderableCompare >
203 return passesRendered;
207template<
typename RenderableCompare >
210 rq.build( root, viewTransform );
214template<
typename RenderableCompare >
221template<
typename RenderableCompare >
224 rq.updateModelViewTransforms( viewTransform );
228template<
typename RenderableCompare >
237 buildRenderQueues( *root, viewTransform );
241 rewindRenderQueues();
242 if( isViewTransformFixed() )
244 updateRenderQueues( viewTransform );
249 while( !rq.isEmpty() )
262 if( acquiredFeatures.find( &
gf ) == acquiredFeatures.end() )
264 VideoResource* const vr = gf.acquireVideoResource();
265 acquiredFeatures[ &gf ] = vr;
276 for(
auto itr = acquiredFeatures.begin();
itr != acquiredFeatures.end(); )
280 if(
itr->second !=
nullptr )
284 acquiredFeatures.erase(
itr++ );
295template<
typename RenderableCompare >
296template<
typename GeometryFeatureType >
300 const auto itr = acquiredFeatures.find( &
gf );
302 return static_cast< typename GeometryFeatureType::ManagedInterface&
>( *
itr->second );
306template<
typename RenderableCompare >
307template<
typename GeometryFeatureType >
Defines LibCarna::base::FrameRenderer.
Defines LibCarna::base::GeometryFeature.
#define LIBCARNA_ASSERT(expression)
If the given expression is false, a break point is raised in debug mode and an AssertionFailure throw...
Defines LibCarna::base::RenderQueue.
Defines LibCarna::base::RenderStage.
Represents an association.
Represents an acquisition of the video resources from a particular GeometryFeature....
Represents "components" that are aggregated by Geometry objects. Closer description is given here.
Partially implements a rendering stage that uses at least one render queue for rendering geometry fro...
virtual void render(const Renderable &renderable)=0
Renders the renderable.
RenderQueue< RenderableCompare > rq
Holds the predefined rendering queue of this rendering stage.
virtual void updateRenderQueues(const math::Matrix4f &viewTransform)
Recomputes the model-view transforms of the renderables enqueued by this stage.
const unsigned int geometryTypeMask
Renders such geometries whose type AND-linked with this equals geometryType.
virtual void rewindRenderQueues()
Rewinds the rendering queues of this stage.
virtual ~GeometryStage()
Releases acquired video resources.
virtual void prepareFrame(Node &root) override
Called once before each frame.
virtual void buildRenderQueues(Node &root, const math::Matrix4f &viewTransform)
Builds the rendering queues of this stage.
void activateGLContext() const
Ensures that the OpenGL context of the hosting LibCarna::base::FrameRenderer is the current one.
GeometryFeatureType::ManagedInterface & videoResource(GeometryFeatureType &geometryFeature) const
Interfaces the geometryFeature video resources that were acquired by this rendering stage.
virtual void renderPass(const math::Matrix4f &viewTransform, RenderTask &rt, const Viewport &vp) override
Called once per pass.
GeometryStage(unsigned int geometryType, unsigned int geometryTypeMask=RenderQueue< RenderableCompare >::EXACT_MATCH_GEOMETRY_TYPE_MASK)
Instantiates s.t. the predefined rendering queue enqueues such LibCarna::base::Geometry scene graph n...
const GeometryFeatureType::ManagedInterface & videoResource(const GeometryFeatureType &geometryFeature) const
std::size_t renderedPassesCount() const
Tells the number of passes rendered so far since the beginning of the current frame.
const unsigned int geometryType
Renders such geometries whose type AND-linked with geometryTypeMask equals this.
Defines the inner node of a scene graph. Implements a spatial scene element that is allowed to have c...
Gathers renderable geometry nodes from scene graph and provides those in a particular order,...
Base abstract class of each rendering stage. Refer to the documentation of the rendering process.
Invokes the rendering stages of the frame renderer successively.
Represents a Geometry object that has been queued into a RenderQueue. The object's model-view transfo...
Defines a rendering viewport. The viewport is a property of the current OpenGL context.
Defines LibCarna::base::math namespace and LIBCARNA_FOR_VECTOR3UI.
Eigen::Matrix< float, 4, 4, Eigen::ColMajor > Matrix4f
Defines matrix.