TDME2  1.9.200
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
GeometryBuffer.cpp
Go to the documentation of this file.
2 
3 #include <string>
4 
5 #include <tdme/tdme.h>
10 #include <tdme/engine/Decal.h>
11 #include <tdme/engine/Engine.h>
12 #include <tdme/math/Math.h>
13 #include <tdme/utilities/Console.h>
14 #include <tdme/utilities/Float.h>
15 
17 
18 using std::string;
19 using std::to_string;
20 
26 using tdme::math::Math;
29 
30 GeometryBuffer::GeometryBuffer(int32_t width, int32_t height)
31 {
32  this->width = width;
33  this->height = height;
34  this->frameBufferId = -1;
44 }
45 
47 {
67  );
68 }
69 
70 void GeometryBuffer::reshape(int32_t width, int32_t height)
71 {
72  this->width = width;
73  this->height = height;
83 }
84 
86 {
96  // TODO: Vulkan might need a extra method here
98 }
99 
101 {
105 }
106 
108 {
109  Engine::getRenderer()->bindFrameBuffer(Engine::getRenderer()->FRAMEBUFFER_DEFAULT);
112 }
113 
114 void GeometryBuffer::renderToScreen(Engine* engine, vector<Decal*>& decalEntities)
115 {
116  auto renderer = Engine::getRenderer();
117 
118  // use default context
119  auto contextIdx = renderer->CONTEXTINDEX_DEFAULT;
120 
121  //
122  renderer->disableCulling(contextIdx);
123 
124  // use deferred lighting render shader
125  auto frameBufferRenderShader = Engine::getFrameBufferRenderShader();
126  auto deferredLightingRenderShader = Engine::getDeferredLightingRenderShader();
127  deferredLightingRenderShader->useProgram(engine, decalEntities);
128 
129  // bind geometry buffer textures
130  renderer->setTextureUnit(contextIdx, 0);
131  renderer->bindTexture(contextIdx, geometryBufferTextureId1);
132  renderer->setTextureUnit(contextIdx, 1);
133  renderer->bindTexture(contextIdx, geometryBufferTextureId2);
134  renderer->setTextureUnit(contextIdx, 2);
135  renderer->bindTexture(contextIdx, geometryBufferTextureId3);
136 
137  // bind color buffer textures
138  renderer->setTextureUnit(contextIdx, 3);
139  renderer->bindTexture(contextIdx, colorBufferTextureId1);
140  renderer->setTextureUnit(contextIdx, 4);
141  renderer->bindTexture(contextIdx, colorBufferTextureId2);
142  renderer->setTextureUnit(contextIdx, 5);
143  renderer->bindTexture(contextIdx, colorBufferTextureId3);
144  renderer->setTextureUnit(contextIdx, 6);
145  renderer->bindTexture(contextIdx, colorBufferTextureId4);
146  renderer->setTextureUnit(contextIdx, 7);
147  renderer->bindTexture(contextIdx, colorBufferTextureId5);
148 
149  // bind depth buffer texture
150  renderer->setTextureUnit(contextIdx, 8);
151  renderer->bindTexture(contextIdx, depthBufferTextureId);
152 
153  //
154  renderer->bindVerticesBufferObject(contextIdx, frameBufferRenderShader->getVBOVertices());
155  renderer->bindTextureCoordinatesBufferObject(contextIdx, frameBufferRenderShader->getVBOTextureCoordinates());
156 
157  // draw
158  renderer->drawTrianglesFromBufferObjects(contextIdx, 2, 0);
159 
160  // unbind buffers
161  renderer->unbindBufferObjects(contextIdx);
162 
163  // unbind geometry buffer textures
164  renderer->setTextureUnit(contextIdx, 0);
165  renderer->bindTexture(contextIdx, renderer->ID_NONE);
166  renderer->setTextureUnit(contextIdx, 1);
167  renderer->bindTexture(contextIdx, renderer->ID_NONE);
168  renderer->setTextureUnit(contextIdx, 2);
169  renderer->bindTexture(contextIdx, renderer->ID_NONE);
170 
171  // unbind color buffer textures
172  renderer->setTextureUnit(contextIdx, 3);
173  renderer->bindTexture(contextIdx, renderer->ID_NONE);
174  renderer->setTextureUnit(contextIdx, 4);
175  renderer->bindTexture(contextIdx, renderer->ID_NONE);
176  renderer->setTextureUnit(contextIdx, 5);
177  renderer->bindTexture(contextIdx, renderer->ID_NONE);
178  renderer->setTextureUnit(contextIdx, 6);
179  renderer->bindTexture(contextIdx, renderer->ID_NONE);
180  renderer->setTextureUnit(contextIdx, 7);
181  renderer->bindTexture(contextIdx, renderer->ID_NONE);
182 
183  // unbind depth buffer texture
184  renderer->setTextureUnit(contextIdx, 8);
185  renderer->bindTexture(contextIdx, renderer->ID_NONE);
186 
187  // switch back to diffuse texture unit
188  renderer->setTextureUnit(contextIdx, 0);
189 
190  //
191  deferredLightingRenderShader->unUseProgram();
192 
193  // unset
194  renderer->enableCulling(contextIdx);
195 }
196 
Decal entity to be used with engine class.
Definition: Decal.h:36
Engine main class.
Definition: Engine.h:131
static FrameBufferRenderShader * getFrameBufferRenderShader()
Definition: Engine.h:490
static Renderer * getRenderer()
Definition: Engine.h:434
static STATIC_DLL_IMPEXT Engine * instance
Definition: Engine.h:204
static DeferredLightingRenderShader * getDeferredLightingRenderShader()
Definition: Engine.h:497
Geometry buffer class.
void reshape(int32_t width, int32_t height)
Resize the geometry buffer.
void initialize()
Initialize the geometry buffer.
void renderToScreen(Engine *engine, vector< Decal * > &decalEntities)
Render to screen or bound geometry buffer @engine engine.
void dispose()
Disposes this geometry buffer.
void enableGeometryBuffer()
Enables this geometry buffer to be rendered.
static void disableGeometryBuffer()
Switches back to non offscreen main frame buffer to be rendered.
virtual void resizeDepthBufferTexture(int32_t textureId, int32_t width, int32_t height)=0
Resizes a depth texture.
virtual void setViewPort(int32_t width, int32_t height)=0
Set up viewport parameter.
virtual void updateViewPort()=0
Update viewport.
virtual int32_t createDepthBufferTexture(int32_t width, int32_t height, int32_t cubeMapTextureId, int32_t cubeMapTextureIndex)=0
Creates a depth buffer texture.
virtual int32_t createGBufferGeometryTexture(int32_t width, int32_t height)=0
Creates a geometry buffer geometry texture.
virtual void disposeTexture(int32_t textureId)=0
Dispose a texture.
virtual void resizeGBufferGeometryTexture(int32_t textureId, int32_t width, int32_t height)=0
Resizes a geometry buffer geometry texture.
virtual void bindFrameBuffer(int32_t frameBufferId)=0
Enables a framebuffer to be rendered.
virtual void disposeFrameBufferObject(int32_t frameBufferId)=0
Disposes a frame buffer object.
virtual int32_t createGBufferColorTexture(int32_t width, int32_t height)=0
Creates a geometry buffer color RGBA texture.
virtual int32_t createGeometryBufferObject(int32_t depthBufferTextureId, int32_t geometryBufferTextureId1, int32_t geometryBufferTextureId2, int32_t geometryBufferTextureId3, int32_t colorBufferTextureId1, int32_t colorBufferTextureId2, int32_t colorBufferTextureId3, int32_t colorBufferTextureId4, int32_t colorBufferTextureId5)=0
Creates a geometry frame buffer object.
virtual void resizeGBufferColorTexture(int32_t textureId, int32_t width, int32_t height)=0
Resizes a geometry buffer color RGBA texture.
Standard math functions.
Definition: Math.h:19
Console class.
Definition: Console.h:29
Float class.
Definition: Float.h:27