OpenPolygon  1.0.0
OpenPolygon is a Rendering Engine
rendercomponent.h
1 /*
2  Copyright (C) 2014 - 2016 Mutzii
3 
4  This program is free software: you can redistribute it and/or modify
5  it under the terms of the GNU General Public License as published by
6  the Free Software Foundation, either version 3 of the License, or
7  (at your option) any later version.
8 
9  This program is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  GNU General Public License for more details.
13 
14  You should have received a copy of the GNU General Public License
15  along with this program. If not, see <http://www.gnu.org/licenses/>.
16 
17 */
18 #ifndef RENDERCOMPONENT_H
19 #define RENDERCOMPONENT_H
20 
21 #include "index.h"
22 #include "display.h"
23 #include "drawevent.h"
24 #include "entitymanager.h"
25 #include "elementmanager.h"
26 #include "positionmanager.h"
27 #include "shadermanager.h"
28 #include "meshmanager.h"
29 
30 namespace Engine
31 {
36  {
37  public:
38  virtual void create( OpenPolygonDisplay * display ) =0;
39  virtual void draw( const DrawEvent & event ) =0;
40  };
41 
46  {
47  public:
48  explicit RenderEntity( const std::string & name )
49  {
50  Arch::DatabaseManager * manager = Arch::DatabaseManager::getSingletonPtr();
51  EntityManager * entity_manager = ( EntityManager * ) manager->getDatabase("EntityManager");
52 
53  m_entity = entity_manager->createEntity();
54  m_entity->setResourceName( name );
55  }
56 
57  virtual ~RenderEntity()
58  {
59  //---------------------------------
60  // Component Databases ..
61  //---------------------------------
62  Arch::DatabaseManager * database_manager = Arch::DatabaseManager::getSingletonPtr();
63 
64  ShaderManager * shader_manager = (ShaderManager *) database_manager->getDatabase("ShaderManager");
65  MeshManager * mesh_manager = (MeshManager *) database_manager->getDatabase("MeshManager");
66  PositionManager * position_manager = (PositionManager *) database_manager->getDatabase("PositionManager");
67 
68  if( getEntity()->isAttached("mesh") )
69  {
70  mesh_manager->destroy( getEntity()->getLocation("mesh").component_id );
71  }
72 
73  if( getEntity()->isAttached("shader") )
74  {
75  shader_manager->destroy( getEntity()->getLocation("shader").component_id );
76  }
77 
78  if( getEntity()->isAttached("position") )
79  {
80  position_manager->destroy( getEntity()->getLocation("position").component_id );
81  }
82 
83  }
84 
85  void setEntity( Entity * entity )
86  {
87  m_entity = entity;
88  }
89 
90  Entity * getEntity(void)
91  {
92  return m_entity;
93  }
94 
95  protected:
96 
97  Entity * m_entity;
98  };
99 
104  {
105  public:
106  explicit RenderElement( const std::string & name )
107  {
108  Arch::DatabaseManager * manager = Arch::DatabaseManager::getSingletonPtr();
109  ElementManager * element_manager = ( ElementManager *) manager->getDatabase("ElementManager");
110 
111  m_element = element_manager->createElement();
112  m_element->setResourceName( name );
113  }
114 
115  virtual ~RenderElement()
116  {
117 
118  //---------------------------------
119  // Component Databases ..
120  //---------------------------------
121  Arch::DatabaseManager * database_manager = Arch::DatabaseManager::getSingletonPtr();
122 
123  ShaderManager * shader_manager = (ShaderManager *) database_manager->getDatabase("ShaderManager");
124  MeshManager * mesh_manager = (MeshManager *) database_manager->getDatabase("MeshManager");
125  PositionManager * position_manager = (PositionManager *) database_manager->getDatabase("PositionManager");
126 
127  if( getElement()->isAttached("mesh") )
128  {
129  mesh_manager->destroy( getElement()->getLocation("mesh").component_id );
130  }
131 
132  if( getElement()->isAttached("shader") )
133  {
134  shader_manager->destroy( getElement()->getLocation("shader").component_id );
135  }
136 
137  if( getElement()->isAttached("position") )
138  {
139  position_manager->destroy( getElement()->getLocation("position").component_id );
140  }
141 
142  }
143 
144  void setElement( Element * element )
145  {
146  m_element = element;
147  }
148 
149  Element * getElement(void)
150  {
151  return m_element;
152  }
153 
154  protected:
155 
156  Element * m_element;
157  };
158 
159 }
160 #endif // RENDERCOMPONENT_H
The PositionManager class.
Definition: positionmanager.h:14
The Entity - base component class - for 3D Entitys.
Definition: entity.h:28
Entity * createEntity(void)
createEntity
Definition: EntityManager.cpp:26
The RenderEntity - contained component Entity - abstract class.
Definition: rendercomponent.h:45
Definition: element.h:23
The ElementManager controlled Elements ( are 2D Entitys )
Definition: elementmanager.h:30
The ShaderManager controlled IShader ( Shader , ShaderARB )
Definition: shadermanager.h:38
The MeshManager class.
Definition: meshmanager.h:37
The DrawEvent - event class.
Definition: drawevent.h:31
The RenderElement - contained component Element - abstract class.
Definition: rendercomponent.h:103
The Element - base component class - for 2D Entitys.
Definition: element.h:28
The OpenPolygonDisplay - display abstract class.
Definition: display.h:55
The RenderInterface class.
Definition: rendercomponent.h:35
The EntityManager controlled Entitys ( only 3D Entitys )
Definition: entitymanager.h:31
void destroy(uint container_id)
destroy
Definition: MeshManager.cpp:188