diff --git a/src/engine/core/gui/uiComponent/UiText.cpp b/src/engine/core/gui/uiComponent/UiText.cpp index 7a17bca..4d43250 100644 --- a/src/engine/core/gui/uiComponent/UiText.cpp +++ b/src/engine/core/gui/uiComponent/UiText.cpp @@ -8,9 +8,13 @@ #include "../text/Font.h" -UiText::UiText(Font &font, std::string text, const glm::vec2 &relativePos, const glm::vec2& relativeSize) : font(font), text(std::move(text)) { +UiText::UiText(Font &font, std::string text, const glm::vec2 &relativePos, glm::vec3 color): font(font), text(std::move(text)), color(color) { uiPositioner.setRelativePos(relativePos); - uiPositioner.setRelativeSize(relativeSize); +} + +UiText::UiText(Font &font, std::string text, const glm::vec2 &relativePos) : font(font), text(std::move(text)) { + uiPositioner.setRelativePos(relativePos); + color = glm::vec3(0.f); } void UiText::onCollectRenderData(UiRenderBundle& ui_render_bundle) { diff --git a/src/engine/core/gui/uiComponent/UiText.h b/src/engine/core/gui/uiComponent/UiText.h index c1ea85d..490de9a 100644 --- a/src/engine/core/gui/uiComponent/UiText.h +++ b/src/engine/core/gui/uiComponent/UiText.h @@ -6,13 +6,15 @@ #define DICEWARS_SIEDLER_UITEXT_H #include "UiComponent.h" #include "UiRenderBundle.h" +#include "glm/vec3.hpp" class Font; class UiText : public UiComponent { public: - UiText(Font& font, std::string text, const glm::vec2& relativePos, const glm::vec2& relativeSize); + UiText(Font& font, std::string text, const glm::vec2& relativePos, glm::vec3 size); + UiText(Font& font, std::string text, const glm::vec2& relativePos); void setText(const std::string& text); [[nodiscard]] const Font& getFont() const { return font; } @@ -21,11 +23,15 @@ public: return text; } + [[nodiscard]] glm::vec3 getColor() const { return color; } + protected: void onCollectRenderData(UiRenderBundle &uiRenderBundle) override; private: std::string text; Font& font; + + glm::vec3 color; }; diff --git a/src/engine/renderer/TextRenderer.cpp b/src/engine/renderer/TextRenderer.cpp index b35cb56..3df13e5 100644 --- a/src/engine/renderer/TextRenderer.cpp +++ b/src/engine/renderer/TextRenderer.cpp @@ -20,9 +20,10 @@ void TextRenderer::renderTexts(const std::vector &textsToRender) { } glEnable(GL_DEPTH_TEST); glDisable(GL_BLEND); + shader.stop(); } -void TextRenderer::renderText(const UiText &textToRender) const { +void TextRenderer::renderText(const UiText &textToRender) { const Dimensions& d = textToRender.uiPositioner.screenSpace; const Font& font = textToRender.getFont(); @@ -36,7 +37,7 @@ void TextRenderer::renderText(const UiText &textToRender) const { float scale = 1.0f; - + shader.loadTextColor(textToRender.getColor()); for (char c : text) { const Font::Character& ch = font.getCharacter(c); diff --git a/src/engine/renderer/TextRenderer.h b/src/engine/renderer/TextRenderer.h index aa60040..300e8d5 100644 --- a/src/engine/renderer/TextRenderer.h +++ b/src/engine/renderer/TextRenderer.h @@ -17,6 +17,9 @@ class TextRenderer { public: TextRenderer() : textModel(Loader::instance().loadTextModel()) {}; void renderTexts(const std::vector &textsToRender); + + void renderText(const UiText &textToRender); + void renderText(const UiText &textToRender) const; private: TextShader shader; diff --git a/src/engine/renderer/shaders/TextShader.cpp b/src/engine/renderer/shaders/TextShader.cpp index c830270..e0b95f5 100644 --- a/src/engine/renderer/shaders/TextShader.cpp +++ b/src/engine/renderer/shaders/TextShader.cpp @@ -8,8 +8,13 @@ void TextShader::loadProjectionMatrix(glm::mat4 matrix) { ShaderProgram::loadMatrix(location_projectionMatrix, matrix); } +void TextShader::loadTextColor(glm::vec3 color) { + ShaderProgram::loadVector(location_textColor, color); +} + void TextShader::getAllUniformLocations() { location_projectionMatrix = ShaderProgram::getUniformLocation("projectionMatrix"); + location_textColor = ShaderProgram::getUniformLocation("textColor"); } void TextShader::bindAttributes() const { diff --git a/src/engine/renderer/shaders/TextShader.h b/src/engine/renderer/shaders/TextShader.h index ebefd91..024eb0d 100644 --- a/src/engine/renderer/shaders/TextShader.h +++ b/src/engine/renderer/shaders/TextShader.h @@ -14,6 +14,7 @@ public : TextShader::getAllUniformLocations(); } void loadProjectionMatrix(glm::mat4 matrix); + void loadTextColor(glm::vec3 color); protected: void getAllUniformLocations() override; @@ -23,6 +24,7 @@ private: inline static const std::string FRAGMENT_FILE = "assets/shaders/textFragmentShader.glsl"; int location_projectionMatrix; + int location_textColor; }; diff --git a/src/game/UILayer.cpp b/src/game/UILayer.cpp index fdad6b3..8a6691f 100644 --- a/src/game/UILayer.cpp +++ b/src/game/UILayer.cpp @@ -32,7 +32,7 @@ void UILayer::onAttach() { Font myFont("/usr/share/fonts/TTF/DejaVuSans.ttf", 48); font = std::make_unique(myFont); - auto text = std::make_unique(*font, "Hello World!", glm::vec2(0.5f, 0.5f), glm::vec2(1.f)); + auto text = std::make_unique(*font, "Hello World!", glm::vec2(0.5f, 0.5f), glm::vec3(1,1,1)); rootContainer->addChild(std::move(text)); }