Browse Source

support for 2 byte utf8 characters

Kajetan Johannes Hammerle 3 years ago
parent
commit
fad6ccc7a1
2 changed files with 10 additions and 4 deletions
  1. 1 1
      Game.cpp
  2. 9 3
      rendering/FontRenderer.cpp

+ 1 - 1
Game.cpp

@@ -14,7 +14,7 @@ void Game::render(float lag, Renderer& renderer) const {
     renderer.translateTo(0.0f, 0.0f).scale(4.0f).update();
     for(uint i = 0; i < controller.getButtonAmount(); i++) {
         String s(controller.getName(i));
-        s.append(": ").append(controller.wasReleased(i)).append(" ").append(controller.getDownTime(i));
+        s.append(": ").append(controller.wasReleased(i)).append(" ").append(controller.getDownTime(i)).append("öüäÖÜÄÖß");
         renderer.drawString(0, 10 * i, s);
     }
 }

+ 9 - 3
rendering/FontRenderer.cpp

@@ -1,3 +1,5 @@
+#include <iostream>
+
 #include "rendering/FontRenderer.h"
 
 FontRenderer::FontRenderer() : buffer(8 * 1024 * 1024), tex("resources/font.png") {
@@ -19,7 +21,11 @@ void FontRenderer::drawString(float x, float y, const char* text) {
     float b = 1.0f;
 
     while(text[index] != '\0' && index < maxIndex) {
-        char c = text[index];
+        char32_t c = text[index];
+        if(c > 128 && index + 1 < maxIndex && text[index + 1] != '\0') {
+            index++;
+            c = (text[index] & 0x3F) | ((c & 0x1F) << 6);
+        }
         if(c == '&') {
             if(text[index + 1] == '\0' || text[index + 2] == '\0' || text[index + 3] == '\0') {
                 break;
@@ -40,11 +46,11 @@ void FontRenderer::drawString(float x, float y, const char* text) {
         buffer.add(x).add(y + 8).add(minX).add(maxY).add(r).add(g).add(b).add(1.0f);
         buffer.add(x + 6).add(y).add(maxX).add(minY).add(r).add(g).add(b).add(1.0f);
         buffer.add(x + 6).add(y + 8).add(maxX).add(maxY).add(r).add(g).add(b).add(1.0f);
-        
+
         x += 6;
         index++;
     }
-    
+
     tex.bind();
     buffer.draw(8);
 }