LibCarna Version 3.4.0
Loading...
Searching...
No Matches
MeshRenderingStage.hpp
Go to the documentation of this file.
1/*
2 * Copyright (C) 2010 - 2016 Leonid Kostrykin
3 *
4 * Chair of Medical Engineering (mediTEC)
5 * RWTH Aachen University
6 * Pauwelsstr. 20
7 * 52074 Aachen
8 * Germany
9 *
10 *
11 * Copyright (C) 2021 - 2025 Leonid Kostrykin
12 *
13 */
14
15#ifndef MESHRENDERINGSTAGE_H_6014714286
16#define MESHRENDERINGSTAGE_H_6014714286
17
25
31namespace LibCarna
32{
33
34namespace base
35{
36
37
38
39// ----------------------------------------------------------------------------------
40// MeshRenderingMixin
41// ----------------------------------------------------------------------------------
42
48class LIBCARNA MeshRenderingMixin
49{
50
51public:
52
60 MeshRenderingMixin( unsigned int geometryType );
61
66
71 const static unsigned int DEFAULT_ROLE_MESH = 0;
72
77 const static unsigned int DEFAULT_ROLE_MATERIAL = 1;
78
83 const unsigned int geometryType;
84
85}; // MeshRenderingMixin
86
87
88
89// ----------------------------------------------------------------------------------
90// MeshRenderingStage
91// ----------------------------------------------------------------------------------
92
109template< typename RenderableCompare >
110class MeshRenderingStage : public GeometryStage< RenderableCompare >, public MeshRenderingMixin
111{
112
113 RenderTask* renderTask;
114
115public:
116
124
125 virtual void renderPass( const math::Matrix4f& viewTransform, RenderTask& rt, const Viewport& vp ) override;
126
127protected:
128
131 virtual void render( const Renderable& renderable ) override;
132
133}; // MeshRenderingStage
134
135
136template< typename RenderableCompare >
138 : GeometryStage< RenderableCompare >( geometryType )
139 , MeshRenderingMixin( geometryType )
140{
141}
142
143
144template< typename RenderableCompare >
146{
147 renderTask = &rt;
149 renderTask = nullptr;
150}
151
152
153template< typename RenderableCompare >
155{
157 const Material& material = static_cast< Material& >( renderable.geometry().feature( DEFAULT_ROLE_MATERIAL ) );
158 this->videoResource( material ).activate( rs );
159
160 ShaderUniform< math::Matrix4f >( "modelView", renderable.modelViewTransform() ).upload();
161 ShaderUniform< math::Matrix4f >( "projection", renderTask->projection ).upload();
162 ShaderUniform< math::Matrix4f >( "modelViewProjection", renderTask->projection * renderable.modelViewTransform() ).upload();
163 ShaderUniform< math::Matrix4f >( "normalsView", renderable.viewModelTransform().transpose() ).upload();
164
165 const ManagedMeshBase& mesh = static_cast< ManagedMeshBase& >( renderable.geometry().feature( DEFAULT_ROLE_MESH ) );
166 this->videoResource( mesh ).get().render();
167}
168
169
170
171} // namespace LibCarna :: base
172
173} // namespace LibCarna
174
175#endif // MESHRENDERINGSTAGE_H_6014714286
Defines LibCarna::base::GeometryStage.
Defines LibCarna::base::ManagedMesh.
Defines LibCarna::base::Material.
Defines LibCarna::base::RenderState.
Defines LibCarna::base::RenderTask.
Defines LibCarna::base::Renderable.
Defines LibCarna::base::ShaderUniformType, LibCarna::base::ShaderUniformBase, and LibCarna::base::Sha...
Represents an association.
Partially implements a rendering stage that uses at least one render queue for rendering geometry fro...
virtual void renderPass(const math::Matrix4f &viewTransform, RenderTask &rt, const Viewport &vp) override
Called once per pass.
const unsigned int geometryType
Renders such geometries whose type AND-linked with geometryTypeMask equals this.
Represents MeshBase object whose lifetime is managed by instances of this class. This is a format-ind...
Specifies the shader and it's configuration that are to be used for rendering a Geometry node with a ...
Definition Material.hpp:176
Defines MeshRenderingStage class template instance invariants.
const unsigned int geometryType
Holds the geometry type rendered by this MeshRenderingStage.
MeshRenderingMixin(unsigned int geometryType)
Instantiates.
virtual ~MeshRenderingMixin()
Does nothing.
Implements a geometry rendering stage that renders meshes.
MeshRenderingStage(unsigned int geometryType)
Instantiates.
virtual void render(const Renderable &renderable) override
Renders the renderable.
virtual void renderPass(const math::Matrix4f &viewTransform, RenderTask &rt, const Viewport &vp) override
Called once per pass.
Manages the OpenGL render state.
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.
Definition Viewport.hpp:52
Eigen::Matrix< float, 4, 4, Eigen::ColMajor > Matrix4f
Defines matrix.
Definition math.hpp:197