Carna Version 3.3.3
Loading...
Searching...
No Matches
MeshRenderingStage.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 MESHRENDERINGSTAGE_H_6014714286
13#define MESHRENDERINGSTAGE_H_6014714286
14
19#include <Carna/base/ShaderUniform.h>
20#include <Carna/base/Material.h>
22
27namespace Carna
28{
29
30namespace base
31{
32
33
34
35// ----------------------------------------------------------------------------------
36// MeshRenderingStageBase
37// ----------------------------------------------------------------------------------
38
46{
47
48public:
49
57 MeshRenderingStageBase( unsigned int geometryType );
58
63
68 const static unsigned int ROLE_DEFAULT_MESH = 0;
69
74 const static unsigned int ROLE_DEFAULT_MATERIAL = 1;
75
80 const unsigned int geometryType;
81
82}; // MeshRenderingStageBase
83
84
85
86// ----------------------------------------------------------------------------------
87// MeshRenderingStage
88// ----------------------------------------------------------------------------------
89
107template< typename RenderableCompare >
108class MeshRenderingStage : public GeometryStage< RenderableCompare >, public MeshRenderingStageBase
109{
110
111 RenderTask* renderTask;
112
113public:
114
122
125 MeshRenderingStage* clone() const override;
126
127 virtual void renderPass( const math::Matrix4f& viewTransform, RenderTask& rt, const Viewport& vp ) override;
128
129protected:
130
133 virtual void render( const Renderable& renderable ) override;
134
135}; // MeshRenderingStage
136
137
138template< typename RenderableCompare >
140 : GeometryStage< RenderableCompare >( geometryType )
141 , MeshRenderingStageBase( geometryType )
142{
143}
144
145
146template< typename RenderableCompare >
148{
151 result->setEnabled( this->isEnabled() );
152 return result;
153}
154
155
156template< typename RenderableCompare >
158{
159 renderTask = &rt;
161 renderTask = nullptr;
162}
163
164
165template< typename RenderableCompare >
167{
169 const Material& material = static_cast< Material& >( renderable.geometry().feature( ROLE_DEFAULT_MATERIAL ) );
170 this->videoResource( material ).activate( rs );
171
172 ShaderUniform< math::Matrix4f >( "modelView", renderable.modelViewTransform() ).upload();
173 ShaderUniform< math::Matrix4f >( "projection", renderTask->projection ).upload();
174 ShaderUniform< math::Matrix4f >( "modelViewProjection", renderTask->projection * renderable.modelViewTransform() ).upload();
175 ShaderUniform< math::Matrix4f >( "normalsView", renderable.viewModelTransform().transpose() ).upload();
176
177 const ManagedMeshBase& mesh = static_cast< ManagedMeshBase& >( renderable.geometry().feature( ROLE_DEFAULT_MESH ) );
178 this->videoResource( mesh ).get().render();
179}
180
181
182
183} // namespace Carna :: base
184
185} // namespace Carna
186
187#endif // MESHRENDERINGSTAGE_H_6014714286
Defines Carna::base::GeometryStage.
Defines Carna::base::ManagedMesh.
Defines Carna::base::Material.
Defines Carna::base::RenderState.
Defines Carna::base::RenderTask.
Defines Carna::base::Renderable.
Represents an association.
Definition Association.h:45
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.
virtual void renderPass(const math::Matrix4f &viewTransform, RenderTask &rt, const Viewport &vp) override
Called once per pass.
Represents MeshBase object whose lifetime is managed by instances of this class. This is a format-ind...
Definition ManagedMesh.h:57
Specifies the shader and it's configuration that are to be used for rendering a Geometry node with a ...
Definition Material.h:175
Defines MeshRenderingStage class template instance invariants.
MeshRenderingStageBase(unsigned int geometryType)
Instantiates.
virtual ~MeshRenderingStageBase()
Does nothing.
const unsigned int geometryType
Holds the geometry type rendered by this MeshRenderingStage.
Implements a geometry rendering stage that renders meshes.
MeshRenderingStage(unsigned int geometryType)
Instantiates.
virtual void render(const Renderable &renderable) override
Renders the renderable.
MeshRenderingStage * clone() const override
Returns same RenderStage implementation with same configuration.
virtual void renderPass(const math::Matrix4f &viewTransform, RenderTask &rt, const Viewport &vp) override
Called once per pass.
Manages the OpenGL render state.
Definition RenderState.h:86
Invokes the rendering stages of the frame renderer successively.
Definition RenderTask.h:41
Represents a Geometry object that has been queued into a RenderQueue. The object's model-view transfo...
Definition Renderable.h:46
Defines a rendering viewport. The viewport is a property of the current OpenGL context.
Definition Viewport.h:49
Eigen::Matrix< float, 4, 4, Eigen::ColMajor > Matrix4f
Defines matrix.
Definition math.h:193