Renderer.cpp 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. #include "rendering/Renderer.h"
  2. #include "rendering/GL.h"
  3. Renderer::Renderer(Shader& shader)
  4. : shader(shader), texture(true), color(true) {
  5. }
  6. void Renderer::init() {
  7. shader.use();
  8. GL::enableBlending();
  9. setTextureMode(false);
  10. setColorMode(false);
  11. fontRenderer.init();
  12. colorRenderer.init();
  13. }
  14. void Renderer::pop() {
  15. stack.pop();
  16. }
  17. void Renderer::push() {
  18. stack.push();
  19. }
  20. void Renderer::update() {
  21. shader.setMatrix("model", stack.peek().getValues());
  22. }
  23. Renderer& Renderer::scale(float sx, float sy) {
  24. stack.peek().scale(Vector3(sx, sy, 1.0f));
  25. return *this;
  26. }
  27. Renderer& Renderer::scale(float s) {
  28. stack.peek().scale(s);
  29. return *this;
  30. }
  31. Renderer& Renderer::translate(const Vector2& v) {
  32. stack.peek().translateX(v[0]).translateY(v[1]);
  33. return *this;
  34. }
  35. Renderer& Renderer::translateX(float tx) {
  36. stack.peek().translateX(tx);
  37. return *this;
  38. }
  39. Renderer& Renderer::translateY(float ty) {
  40. stack.peek().translateY(ty);
  41. return *this;
  42. }
  43. Renderer& Renderer::translateTo(float tx, float ty) {
  44. stack.peek().translateTo(Vector3(tx, ty, 0.0f));
  45. return *this;
  46. }
  47. Renderer& Renderer::rotate(float degrees) {
  48. stack.peek().rotateZ(degrees);
  49. return *this;
  50. }
  51. void Renderer::setTextureMode(bool b) {
  52. if(b != texture) {
  53. texture = b;
  54. shader.setInt("useTexture", b);
  55. }
  56. }
  57. void Renderer::setColorMode(bool b) {
  58. if(b != color) {
  59. color = b;
  60. shader.setInt("useColor", b);
  61. }
  62. }
  63. void Renderer::setStringSize(int size) {
  64. fontRenderer.setSize(size);
  65. }
  66. float Renderer::drawString(float x, float y, const char* text) {
  67. setTextureMode(true);
  68. setColorMode(true);
  69. return fontRenderer.drawString(x, y, text);
  70. }
  71. void Renderer::drawTriangle(const ColorRenderer::Vertex& v1,
  72. const ColorRenderer::Vertex& v2,
  73. const ColorRenderer::Vertex& v3) {
  74. setTextureMode(false);
  75. setColorMode(true);
  76. colorRenderer.draw(v1, v2, v3);
  77. }
  78. void Renderer::drawTriangle(const Vector2& v1, const Vector2& v2,
  79. const Vector2& v3, Color4 color) {
  80. drawTriangle({v1, color}, {v2, color}, {v3, color});
  81. }
  82. void Renderer::drawRectangle(const Vector2& pos, const Vector2& size,
  83. Color4 color) {
  84. drawTriangle({pos[0], pos[1]}, {pos[0] + size[0], pos[1]},
  85. {pos[0], pos[1] + size[1]}, color);
  86. drawTriangle({pos[0] + size[0], pos[1]}, {pos[0], pos[1] + size[1]},
  87. {pos[0] + size[0], pos[1] + size[1]}, color);
  88. }