Fireworks Engine  v2.0
Lightweight Sandbox Game Engine using OpenGL for additional Customisation and Quick Prototyping
batchrenderer3d.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "renderer3d.h"
4 #include "../renderables/renderable3d.h"
5 
6 #include "../../utils/glassert.h"
7 
8 // GLM
9 #include <glm/glm.hpp>
10 #include <glm/gtc/matrix_transform.hpp>
11 #include <glm/gtc/type_ptr.hpp>
12 #include <glm/gtx/string_cast.hpp>
13 
14 namespace fireworks { namespace graphics {
15 
16 // TODO: Rename these to more understandable and meaningful names
17 #define RENDERER3D_MAX_PRIMITIVES 2000
18 #define RENDERER3D_VERTEX_SIZE sizeof(VertexData3D)
19 #define RENDERER3D_DEFAULT_FACES 6
20 #define RENDERER3D_PRIMITIVE_SIZE RENDERER3D_VERTEX_SIZE * RENDERER3D_DEFAULT_FACES * 4
21 #define RENDERER3D_BUFFER_SIZE RENDERER3D_PRIMITIVE_SIZE * RENDERER3D_MAX_PRIMITIVES
22 #define RENDERER3D_INDICES_SIZE RENDERER3D_MAX_PRIMITIVES * RENDERER3D_DEFAULT_FACES * 6
23 
25  class BatchRenderer3D : public Renderer3D
26  {
27  public:
30  private:
31  GLuint m_VAO;
32  GLuint m_VBO;
33  IndexBuffer* m_IBO;
34  GLsizei m_IndicesCount;
35  std::vector<GLuint> m_TextureSlots;
36 
37  std::vector<unsigned int> m_IndicesPool;
38  VertexData3D* m_Buffer;
39 
40  unsigned int indexOffset;
41  public:
46  BatchRenderer3D(PerspectiveCamera* camera3D, Shader* shader);
48 
50  void begin() override;
52  void submit(const Renderable3D* renderable) override;
54  void end() override;
56  void flush() override;
57  protected:
58  void init();
59  };
60 
61 } }
Creates Index Buffers.
Definition: indexbuffer.h:11
The vertex structure of a 3D primitive.
Definition: renderable3d.h:16
~BatchRenderer3D()
Definition: batchrenderer3d.cpp:45
void begin() override
Begins the rendering process.
Definition: batchrenderer3d.cpp:51
Renders the 3d renderables in a single draw call using batching.
Definition: batchrenderer3d.h:25
BatchRenderer3D(PerspectiveCamera *camera3D, Shader *shader)
Creates a 3D batch renderer.
Definition: batchrenderer3d.cpp:7
The Class responsible for drawing the basic 3D Renderable objects onto the screen.
Definition: renderable3d.h:66
Definition: audioclip.cpp:3
void submit(const Renderable3D *renderable) override
Submits the data to the render queue.
Definition: batchrenderer3d.cpp:57
The class responsible for creating amazing shaders.
Definition: Shader.h:22
void flush() override
Draws the data processed onto the screen.
Definition: batchrenderer3d.cpp:169
Forward declaration of the graphics::Renderable3D.
Definition: renderer3d.h:16
A perspective camera to view objects in perspective projection.
Definition: perspectivecamera.h:16
void end() override
Ends the submission and prepares the renderer to start drawing.
Definition: batchrenderer3d.cpp:145
void init()
Definition: batchrenderer3d.cpp:23
Shader * shader
The shader with which the entire batch or renderables are rendered with.
Definition: batchrenderer3d.h:29