Browse Source

simplified code with buffers and lists

Kajetan Johannes Hammerle 3 years ago
parent
commit
11f24c4434
4 changed files with 34 additions and 74 deletions
  1. 1 1
      gaming-core
  2. 5 14
      rendering/ColorRenderer.cpp
  3. 25 55
      rendering/FontRenderer.cpp
  4. 3 4
      rendering/FontRenderer.h

+ 1 - 1
gaming-core

@@ -1 +1 @@
-Subproject commit 9398efdd34f486e25c52053ec2c95472a063e26f
+Subproject commit 43b70c7d121b7551e1c7e433d34628c8d2ec670e

+ 5 - 14
rendering/ColorRenderer.cpp

@@ -1,24 +1,15 @@
 #include "rendering/ColorRenderer.h"
 #include "gaming-core/wrapper/Attributes.h"
-#include "gaming-core/utils/List.h"
+#include "gaming-core/utils/Buffer.h"
 
 ColorRenderer::ColorRenderer() {
-    vertexBuffer.setAttributes(Attributes().addFloat(2).addSpacer(0, 0).addColor4());
+    vertexBuffer.setAttributes(Attributes().addFloat(2).addSpacer().addColor4());
     vertexBuffer.setStreamData(3 * sizeof (float) * 6);
 }
 
 void ColorRenderer::draw(const Vertex& v1, const Vertex& v2, const Vertex& v3) {
-    List<float, 50> buffer;
-    buffer.add(v1.x);
-    buffer.add(v1.y);
-    buffer.add(*reinterpret_cast<const float*>(&(v1.color.data[0])));
-    buffer.add(v2.x);
-    buffer.add(v2.y);
-    buffer.add(*reinterpret_cast<const float*>(&(v2.color.data[0])));
-    buffer.add(v3.x);
-    buffer.add(v3.y);
-    buffer.add(*reinterpret_cast<const float*>(&(v3.color.data[0])));
-    
-    vertexBuffer.updateData(0, buffer.getLength() * sizeof(float), buffer.begin());
+    Buffer <sizeof (Vertex) * 3 > buffer;
+    buffer.add(v1).add(v2).add(v3);
+    vertexBuffer.updateData(0, buffer.getLength(), buffer);
     vertexBuffer.draw(3);
 }

+ 25 - 55
rendering/FontRenderer.cpp

@@ -1,22 +1,23 @@
 #include "rendering/FontRenderer.h"
 #include "gaming-core/wrapper/Attributes.h"
-#include "gaming-core/utils/List.h"
+#include "gaming-core/utils/Color.h"
+#include "gaming-core/utils/Buffer.h"
 
-FontRenderer::FontRenderer() : tex1("resources/font8x8.png"), tex2("resources/font16x16.png"),
-tex3("resources/font24x24.png"), activeTex(&tex1), scale(1) {
-    vertexBuffer.setAttributes(Attributes().addFloat(2).addFloat(2).addFloat(4));
+FontRenderer::FontRenderer() : activeTex(0), scale(1) {
+    tex.add("resources/font8x8.png");
+    tex.add("resources/font16x16.png");
+    tex.add("resources/font24x24.png");
+    vertexBuffer.setAttributes(Attributes().addFloat(2).addFloat(2).addColor4());
     vertexBuffer.setStreamData(256 * 4 * sizeof (float) * 8);
 }
 
 float FontRenderer::drawString(float x, float y, const char* text) {
     const int maxIndex = 256;
 
-    List<float, maxIndex * 4 * 8> buffer;
-
+    Buffer<sizeof (float) * maxIndex * 4 * 8 > buffer;
+    
     int index = 0;
-    float r = 1.0f;
-    float g = 1.0f;
-    float b = 1.0f;
+    Color4 color(0xFF, 0xFF, 0xFF, 0xFF);
 
     float addX = 6.0f * scale;
     float addY = 8.0f * scale;
@@ -31,9 +32,9 @@ float FontRenderer::drawString(float x, float y, const char* text) {
             if(text[index + 1] == '\0' || text[index + 2] == '\0' || text[index + 3] == '\0') {
                 break;
             }
-            r = (text[index + 1] - '0') * (1.0f / 9.0f);
-            g = (text[index + 2] - '0') * (1.0f / 9.0f);
-            b = (text[index + 3] - '0') * (1.0f / 9.0f);
+            color[0] = ((text[index + 1] - '0') * 255) / 9;
+            color[1] = ((text[index + 2] - '0') * 255) / 9;
+            color[2] = ((text[index + 3] - '0') * 255) / 9;
             index += 4;
             continue;
         }
@@ -42,59 +43,28 @@ float FontRenderer::drawString(float x, float y, const char* text) {
         float minY = (c >> 4) * (1.0f / 16.0f);
         float maxX = minX + (1.0f / 16.0f) - 2.0f / 128.0f;
         float maxY = minY + (1.0f / 16.0f);
-
-        buffer.add(x);
-        buffer.add(y);
-        buffer.add(minX);
-        buffer.add(minY);
-        buffer.add(r);
-        buffer.add(g);
-        buffer.add(b);
-        buffer.add(1.0f);
-        buffer.add(x);
-        buffer.add(y + addY);
-        buffer.add(minX);
-        buffer.add(maxY);
-        buffer.add(r);
-        buffer.add(g);
-        buffer.add(b);
-        buffer.add(1.0f);
-        buffer.add(x + addX);
-        buffer.add(y);
-        buffer.add(maxX);
-        buffer.add(minY);
-        buffer.add(r);
-        buffer.add(g);
-        buffer.add(b);
-        buffer.add(1.0f);
-        buffer.add(x + addX);
-        buffer.add(y + addY);
-        buffer.add(maxX);
-        buffer.add(maxY);
-        buffer.add(r);
-        buffer.add(g);
-        buffer.add(b);
-        buffer.add(1.0f);
+        
+        buffer.add(x).add(y).add(minX).add(minY).add(color);
+        buffer.add(x).add(y + addY).add(minX).add(maxY).add(color);
+        buffer.add(x + addX).add(y).add(maxX).add(minY).add(color);
+        buffer.add(x + addX).add(y + addY).add(maxX).add(maxY).add(color);
 
         x += addX;
         index++;
     }
 
-    activeTex->bind();
-    vertexBuffer.updateData(0, buffer.getLength() * sizeof(float), buffer.begin());
-    vertexBuffer.drawStrip(buffer.getLength() / 8);
+    tex[activeTex].bind();
+    vertexBuffer.updateData(0, buffer.getLength(), buffer);
+    vertexBuffer.drawStrip(buffer.getLength() / (4 * sizeof(float) + sizeof(Color4)));
     return y + addY;
 }
 
 void FontRenderer::setSize(int size) {
-    if(size == 1) {
-        activeTex = &tex2;
-        scale = 2;
-    } else if(size == 2) {
-        activeTex = &tex3;
-        scale = 3;
+    if(size == 1 || size == 2) {
+        activeTex = size;
+        scale = size + 1;
     } else {
-        activeTex = &tex1;
+        activeTex = 0;
         scale = 1;
     }
 }

+ 3 - 4
rendering/FontRenderer.h

@@ -2,15 +2,14 @@
 #define FONTRENDERER_H
 
 #include "gaming-core/wrapper/VertexBuffer.h"
+#include "gaming-core/utils/List.h"
 #include "gaming-core/rendering/FileTexture.h"
 #include "utils/Array.h"
 
 class FontRenderer final {
     VertexBuffer vertexBuffer;
-    FileTexture tex1;
-    FileTexture tex2;
-    FileTexture tex3;
-    FileTexture* activeTex;
+    List<FileTexture, 3> tex;
+    int activeTex;
     int scale;
 
 public: