Number5
Visualisierung 2 Project - Florian Schober (0828151, f.schober@live.com), Andreas Walch (0926780, walch.andreas89@gmail.com)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Sprite.cpp
Go to the documentation of this file.
1 #include "Application.hpp"
2 
4  : m_app(app)
5  , m_shader(app->getShaders().get("sprite"))
6 {
7  vec4 data[] =
8  {
9  vec4(0,0,0,0),
10  vec4(1,1,1,1),
11  vec4(0,1,0,1),
12 
13  vec4(0,0,0,0),
14  vec4(1,0,1,0),
15  vec4(1,1,1,1)
16  };
17 
18  glGenBuffers(1, &m_verticesBuffer);
19  glBindBuffer(GL_ARRAY_BUFFER, m_verticesBuffer);
20  glBufferData(GL_ARRAY_BUFFER, sizeof(data), data, GL_STREAM_DRAW);
21  glBindBuffer(GL_ARRAY_BUFFER, 0);
22 
23  glGenVertexArrays(1, &m_vao);
24  glBindVertexArray(m_vao);
25 
26  glBindBuffer(GL_ARRAY_BUFFER, m_verticesBuffer);
27  GLint positionIndex = Shader::position;
28  glEnableVertexAttribArray(positionIndex);
29  glVertexAttribPointer(positionIndex, 4, GL_FLOAT, GL_FALSE, 0, 0);
30 
31  glBindVertexArray(0);
32  glBindBuffer(GL_ARRAY_BUFFER, 0);
33 
34  m_shader->use();
35  m_shader->uniform("tex", (int)0);
36 }
38 {
39  glDeleteBuffers(1, &m_verticesBuffer);
40  glDeleteVertexArrays(1, &m_vao);
41 }
42 
44 {
45  glDisable(GL_DEPTH_TEST);
46  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
47  glEnable( GL_BLEND );
48 }
50 {
51  glBindTexture(GL_TEXTURE_2D, 0);
52 
53  glEnable(GL_DEPTH_TEST);
54  glDisable( GL_BLEND );
55 }
57 {
58  m_shader->use();
59  glBindVertexArray(m_vao);
60 }
62 {
63  glBindVertexArray(0);
64 }
65 
66 void SpriteRenderer::draw(vec4 const & color, vec2 position, vec2 const & scale, vec2 const & uv_scale, HAlign hAlign, VAlign vAlign)
67 {
68  if (hAlign != HAlign::Left || vAlign != VAlign::Bottom)
69  {
70  switch(hAlign)
71  {
72  case(HAlign::Center): position.x -= scale.x*0.5f; break;
73  case(HAlign::Right): position.x -= scale.x; break;
74  default: break;
75  }
76  switch(vAlign)
77  {
78  case(VAlign::Middle): position.y -= scale.y*0.5f; break;
79  case(VAlign::Top): position.y -= scale.y; break;
80  default: break;
81  }
82  }
83 
84  m_shader->uniform("color", color);
85  m_shader->uniform("location", position);
86  m_shader->uniform("scale", scale);
87  m_shader->uniform("uv_scale", uv_scale);
88 
89  glDrawArrays(GL_TRIANGLES, 0, 6);
90 }
void use()
Definition: Shader.cpp:111
void end()
Definition: Sprite.cpp:61
VAlign
Definition: Sprite.hpp:20
SpriteRenderer(Application *app)
Definition: Sprite.cpp:3
void end2D()
Definition: Sprite.cpp:49
Shader * m_shader
Definition: Sprite.hpp:36
GLuint m_vao
Definition: Sprite.hpp:39
static const uint position
Definition: Shader.hpp:122
HAlign
Definition: Sprite.hpp:11
void begin2D()
Definition: Sprite.cpp:43
void draw(vec4 const &color, vec2 position, vec2 const &scale, vec2 const &uv_scale, HAlign hAlign=HAlign::Left, VAlign vAlign=VAlign::Bottom)
Definition: Sprite.cpp:66
virtual ~SpriteRenderer()
Definition: Sprite.cpp:37
void begin()
Definition: Sprite.cpp:56
GLuint m_verticesBuffer
Definition: Sprite.hpp:38
GLint uniform(string const &name)
Definition: Shader.cpp:115