Carna  Version 3.3.2
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 
16 #include <Carna/base/Renderable.h>
17 #include <Carna/base/RenderState.h>
18 #include <Carna/base/RenderTask.h>
19 #include <Carna/base/ShaderUniform.h>
20 #include <Carna/base/Material.h>
21 #include <Carna/base/Mesh.h>
22 
27 namespace Carna
28 {
29 
30 namespace base
31 {
32 
33 
34 
35 // ----------------------------------------------------------------------------------
36 // MeshRenderingStageBase
37 // ----------------------------------------------------------------------------------
38 
45 class CARNA_LIB MeshRenderingStageBase
46 {
47 
48 public:
49 
57  MeshRenderingStageBase( unsigned int geometryType );
58 
62  virtual ~MeshRenderingStageBase();
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 
107 template< typename RenderableCompare >
108 class MeshRenderingStage : public GeometryStage< RenderableCompare >, public MeshRenderingStageBase
109 {
110 
111  RenderTask* renderTask;
112 
113 public:
114 
121  MeshRenderingStage( unsigned int geometryType );
122 
125  MeshRenderingStage* clone() const override;
126 
127  virtual void renderPass( const math::Matrix4f& viewTransform, RenderTask& rt, const Viewport& vp ) override;
128 
129 protected:
130 
133  virtual void render( const Renderable& renderable ) override;
134 
135 }; // MeshRenderingStage
136 
137 
138 template< typename RenderableCompare >
140  : GeometryStage< RenderableCompare >( geometryType )
141  , MeshRenderingStageBase( geometryType )
142 {
143 }
144 
145 
146 template< typename RenderableCompare >
148 {
150  MyType* const result = new MyType( MeshRenderingStageBase::geometryType );
151  result->setEnabled( this->isEnabled() );
152  return result;
153 }
154 
155 
156 template< typename RenderableCompare >
158 {
159  renderTask = &rt;
160  GeometryStage< RenderableCompare >::renderPass( viewTransform, rt, vp );
161  renderTask = nullptr;
162 }
163 
164 
165 template< typename RenderableCompare >
167 {
168  RenderState rs;
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::Renderable.
Implements a geometry rendering stage that renders meshes.
Manages the OpenGL render state.
Definition: RenderState.h:85
Defines Carna::base::RenderTask.
Defines Carna::base::Material.
Defines Carna::base::GeometryStage.
Partially implements a rendering stage that uses at least one render queue for rendering geometry fro...
Definition: GeometryStage.h:59
GeometryFeature & feature(unsigned int role) const
References the feature with role attached to this node in .
Defines Carna::base::Mesh.
const math::Matrix4f & viewModelTransform() const
Returns the inverse modelViewTransform.
Represents MeshBase object whose lifetime is managed by instances of this class. This is a format-ind...
Definition: ManagedMesh.h:56
Defines Carna::base::RenderState.
Invokes the rendering stages of the frame renderer successively.
Definition: RenderTask.h:40
Specifies the shader and it&#39;s configuration that are to be used for rendering a Geometry node with a ...
Definition: Material.h:174
Eigen::Matrix< float, 4, 4, Eigen::ColMajor > Matrix4f
Defines matrix.
Definition: math.h:193
MeshRenderingStage(unsigned int geometryType)
Instantiates.
const Geometry & geometry() const
References the geometry node.
Defines a rendering viewport. The viewport is a property of the current OpenGL context.
Definition: Viewport.h:48
Defines MeshRenderingStage class template instance invariants.
Represents a Geometry object that has been queued into a RenderQueue. The object&#39;s model-view transfo...
Definition: Renderable.h:45
const unsigned int geometryType
Holds the geometry type rendered by this MeshRenderingStage.
const math::Matrix4f & modelViewTransform() const
References the model-view transform.
Implements ShaderUniformBase class for particular ValueType.