12#ifndef GEOMETRYSTAGE_H_6014714286
13#define GEOMETRYSTAGE_H_6014714286
58template<
typename RenderableCompare >
65 std::size_t passesRendered;
66 std::map< GeometryFeature*, VideoResource* > acquiredFeatures;
111 template<
typename GeometryFeatureType >
116 template<
typename GeometryFeatureType >
151template<
typename RenderableCompare >
154 , passesRendered( 0 )
155 , rq( geometryType, geometryTypeMask )
156 , geometryType( geometryType )
157 , geometryTypeMask( geometryTypeMask )
162template<
typename RenderableCompare >
166 std::for_each( acquiredFeatures.begin(), acquiredFeatures.end(),
167 [&](
const std::pair< GeometryFeature*, VideoResource* >&
entry )
169 if( entry.second != nullptr )
178template<
typename RenderableCompare >
181 if( isInitialized() )
183 renderer().glContext().makeCurrent();
188template<
typename RenderableCompare >
191 RenderStage::prepareFrame( root );
193 this->passesRendered = 0;
197template<
typename RenderableCompare >
200 return passesRendered;
204template<
typename RenderableCompare >
207 rq.build( root, viewTransform );
211template<
typename RenderableCompare >
218template<
typename RenderableCompare >
221 rq.updateModelViewTransforms( viewTransform );
225template<
typename RenderableCompare >
234 buildRenderQueues( *root, viewTransform );
238 rewindRenderQueues();
239 if( isViewTransformFixed() )
241 updateRenderQueues( viewTransform );
246 while( !rq.isEmpty() )
259 if( acquiredFeatures.find( &
gf ) == acquiredFeatures.end() )
261 VideoResource* const vr = gf.acquireVideoResource();
262 acquiredFeatures[ &gf ] = vr;
273 for(
auto itr = acquiredFeatures.begin();
itr != acquiredFeatures.end(); )
277 if(
itr->second !=
nullptr )
281 acquiredFeatures.erase(
itr++ );
292template<
typename RenderableCompare >
293template<
typename GeometryFeatureType >
297 const auto itr = acquiredFeatures.find( &
gf );
299 return static_cast< typename GeometryFeatureType::ManagedInterface&
>( *
itr->second );
303template<
typename RenderableCompare >
304template<
typename GeometryFeatureType >
#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::FrameRenderer.
Defines Carna::base::GeometryFeature.
Defines Carna::base::RenderQueue.
Defines Carna::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...
const unsigned int geometryType
Renders such geometries whose type AND-linked with geometryTypeMask equals this.
RenderQueue< RenderableCompare > rq
Holds the predefined rendering queue of this rendering stage.
void activateGLContext() const
Ensures that the OpenGL context of the hosting Carna::base::FrameRenderer is the current one.
virtual void prepareFrame(Node &root) override
Called once before each frame.
virtual ~GeometryStage()
Releases acquired video resources.
virtual void rewindRenderQueues()
Rewinds the rendering queues of this 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 Carna::base::Geometry scene graph node...
virtual void buildRenderQueues(Node &root, const math::Matrix4f &viewTransform)
Builds the rendering queues of this stage.
const GeometryFeatureType::ManagedInterface & videoResource(const GeometryFeatureType &geometryFeature) const
virtual void render(const Renderable &renderable)=0
Renders the renderable.
GeometryFeatureType::ManagedInterface & videoResource(GeometryFeatureType &geometryFeature) const
Interfaces the geometryFeature video resources that were acquired by this rendering stage.
std::size_t renderedPassesCount() const
Tells the number of passes rendered so far since the beginning of the current frame.
const unsigned int geometryTypeMask
Renders such geometries whose type AND-linked with this equals geometryType.
virtual void updateRenderQueues(const math::Matrix4f &viewTransform)
Recomputes the model-view transforms of the renderables enqueued by this stage.
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 Carna::base::math namespace and CARNA_FOR_VECTOR3UI.
Eigen::Matrix< float, 4, 4, Eigen::ColMajor > Matrix4f
Defines matrix.