-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathRenderer2D.cpp
More file actions
82 lines (68 loc) · 2.08 KB
/
Copy pathRenderer2D.cpp
File metadata and controls
82 lines (68 loc) · 2.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include "Renderer2D.h"
#include "../maths/maths.h"
#include "../maths/Color.h"
namespace Graphics
{
Renderer2D::Renderer2D()
{
m_before.buffer = new sf::Vertex[MAX_VERTICES];
m_before.vertexCount = 0;
m_after.buffer = new sf::Vertex[MAX_VERTICES];
m_after.vertexCount = 0;
}
Renderer2D::~Renderer2D()
{
delete m_before.buffer;
delete m_after.buffer;
}
void Renderer2D::begin()
{
m_before.bufferPtr = m_before.buffer;
m_after.bufferPtr = m_after.buffer;
}
void Renderer2D::submit(const Renderable2D* renderable, const RenderOrder& renderOrder)
{
if (renderOrder == RenderOrder::BEFORE)
submit(renderable, m_before);
if (renderOrder == RenderOrder::AFTER)
submit(renderable, m_after);
}
void Renderer2D::present(sf::RenderWindow& window, const RenderOrder& renderOrder)
{
if (renderOrder == RenderOrder::BEFORE)
{
window.draw(m_before.buffer, m_before.vertexCount, sf::Quads, m_states);
m_before.vertexCount = 0;
}
if (renderOrder == RenderOrder::AFTER)
{
window.draw(m_after.buffer, m_after.vertexCount, sf::Quads, m_states);
m_after.vertexCount = 0;
}
}
void Renderer2D::submit(const Renderable2D* renderable, Render& render)
{
const Vec2& position = renderable->getPosition();
const Vec2& size = renderable->getSize();
const Color& c = renderable->getColor();
const std::vector<Vec2>& m_UVs = renderable->getUVs();
Vec2* uvPtr = const_cast<Vec2*>(&m_UVs[0]);
render.bufferPtr->position = position;
render.bufferPtr->color = c;
render.bufferPtr->texCoords = *uvPtr++;
render.bufferPtr++;
render.bufferPtr->position = Vec2(position.x, position.y + size.y);
render.bufferPtr->color = c;
render.bufferPtr->texCoords = *uvPtr++;
render.bufferPtr++;
render.bufferPtr->position = Vec2(position.x + size.x, position.y + size.y);
render.bufferPtr->color = c;
render.bufferPtr->texCoords = *uvPtr++;
render.bufferPtr++;
render.bufferPtr->position = Vec2(position.x + size.x, position.y);
render.bufferPtr->color = c;
render.bufferPtr->texCoords = *uvPtr++;
render.bufferPtr++;
render.vertexCount += 4;
}
}