BARE2D
Renderer.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include <vector>
4 
5 #include "ShaderProgram.hpp"
6 #include "VAO.hpp"
7 #include "RenderBatch.hpp"
8 
9 namespace BARE2D {
10 
11  /**
12  * @class Renderer
13  * @brief The renderer class holds some shader program, manages some VBO, some render batch(es), and allows customizable, simple rendering.
14  */
15  class Renderer {
16  public:
17  Renderer();
18  virtual ~Renderer();
19 
20  /**
21  * @brief Clears the necessary vectors, etc. to prepare for draw() calls, etc.
22  */
23  virtual void begin();
24 
25  /**
26  * @brief Creates the renderbatches, does necessary stuff before render() call.
27  */
28  virtual void end();
29 
30  /**
31  * @brief Initializes all necessary bits of the renderer.
32  */
33  virtual void init();
34 
35  /**
36  * @brief Initializes all uniforms, such as colour attachments, depth attachments, etc.
37  */
38  virtual void initUniforms();
39 
40  /**
41  * @brief Frees all necessary memory.
42  */
43  virtual void destroy();
44 
45  /**
46  * @brief Actually renders the contents to the screen!
47  */
48  virtual void render();
49 
51 
52  protected:
53  /**
54  * @brief Does stuff inside of the render function, within the shader's use.
55  */
56  virtual void preRender() {};
57 
58  virtual void link(std::initializer_list<std::string> attributes);
59 
60  /**
61  * @brief Constructs all of the render batches from data given by, say, draw() calls.
62  */
63  virtual void createRenderBatches() = 0;
64 
65  ShaderProgram m_shader; // The shader to draw with.
66  VAO m_vertexArrayObject; // Holds all of the vertex buffer object info - the actual uploaded information.
67  std::vector<RenderBatch> m_batches; // Holds all glyphs (a renderbatch is equal to a drawn sprite, for example)
68  };
69 
70 } // namespace BARE2D
BARE2D::Renderer
The renderer class holds some shader program, manages some VBO, some render batch(es),...
Definition: Renderer.hpp:15
BARE2D
Definition: App.cpp:13
BARE2D::Renderer::m_vertexArrayObject
VAO m_vertexArrayObject
Definition: Renderer.hpp:66
BARE2D::Renderer::render
virtual void render()
Actually renders the contents to the screen!
Definition: Renderer.cpp:48
BARE2D::Renderer::~Renderer
virtual ~Renderer()
Definition: Renderer.cpp:10
BARE2D::Renderer::link
virtual void link(std::initializer_list< std::string > attributes)
Definition: Renderer.cpp:85
BARE2D::Renderer::Renderer
Renderer()
Definition: Renderer.cpp:7
BARE2D::Renderer::getShader
ShaderProgram * getShader()
Definition: Renderer.cpp:81
BARE2D::Renderer::preRender
virtual void preRender()
Does stuff inside of the render function, within the shader's use.
Definition: Renderer.hpp:56
BARE2D::Renderer::begin
virtual void begin()
Clears the necessary vectors, etc. to prepare for draw() calls, etc.
Definition: Renderer.cpp:13
BARE2D::Renderer::destroy
virtual void destroy()
Frees all necessary memory.
Definition: Renderer.cpp:43
ShaderProgram.hpp
BARE2D::Renderer::m_shader
ShaderProgram m_shader
Definition: Renderer.hpp:65
BARE2D::ShaderProgram
The ShaderProgram is a GLSL program which combines two shaders - the vertex shader and the fragment s...
Definition: ShaderProgram.hpp:14
BARE2D::VAO
A wrapper class for OpenGL's VAO, as well as its associated VBO and attributes.
Definition: VAO.hpp:11
RenderBatch.hpp
BARE2D::Renderer::initUniforms
virtual void initUniforms()
Initializes all uniforms, such as colour attachments, depth attachments, etc.
Definition: Renderer.cpp:40
BARE2D::Renderer::m_batches
std::vector< RenderBatch > m_batches
Definition: Renderer.hpp:67
VAO.hpp
BARE2D::Renderer::init
virtual void init()
Initializes all necessary bits of the renderer.
Definition: Renderer.cpp:25
BARE2D::Renderer::end
virtual void end()
Creates the renderbatches, does necessary stuff before render() call.
Definition: Renderer.cpp:20
BARE2D::Renderer::createRenderBatches
virtual void createRenderBatches()=0
Constructs all of the render batches from data given by, say, draw() calls.