|
@@ -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;
|
|
|
}
|
|
|
}
|