ADD: Remove UiTexts from Rendering and only use GuiTextRendering
This commit is contained in:
parent
9ef692ab5d
commit
968485ec1b
@ -134,8 +134,8 @@ add_executable(Dicewars_Siedler src/main.cpp
|
||||
src/engine/core/gui/uiComponent/UiText.h
|
||||
src/engine/core/gui/text/Font.cpp
|
||||
src/engine/core/gui/text/Font.h
|
||||
src/engine/core/gui/uiComponent/UiRenderBundle.cpp
|
||||
src/engine/core/gui/uiComponent/UiRenderBundle.h
|
||||
src/engine/renderer/components/UiRenderBundle.cpp
|
||||
src/engine/renderer/components/UiRenderBundle.h
|
||||
src/engine/renderer/shaders/TextShader.cpp
|
||||
src/engine/renderer/shaders/TextShader.h
|
||||
src/engine/renderer/TextRenderer.cpp
|
||||
|
||||
@ -8,7 +8,7 @@
|
||||
#include <vector>
|
||||
|
||||
#include "layout/UiPositioner.h"
|
||||
#include "UiRenderBundle.h"
|
||||
#include "../../../renderer/components/UiRenderBundle.h"
|
||||
#include "../../../renderer/model/GUITexture.h"
|
||||
|
||||
enum class UiElementState {
|
||||
|
||||
@ -22,9 +22,6 @@ void UiText::setText(const std::string &text) {
|
||||
void UiText::onCollectRenderData(UiRenderBundle& ui_render_bundle) {
|
||||
if (!visible) return;
|
||||
|
||||
if (this->text == "Runde: 0") {
|
||||
printf("Runde: 0\n");
|
||||
}
|
||||
|
||||
ui_render_bundle.addText(this);
|
||||
GUIText guiText = GUIText(font, text, uiPositioner.screenSpace);
|
||||
ui_render_bundle.addGUIText(std::make_shared<GUIText>(guiText));
|
||||
}
|
||||
|
||||
@ -5,7 +5,7 @@
|
||||
#ifndef DICEWARS_SIEDLER_UITEXT_H
|
||||
#define DICEWARS_SIEDLER_UITEXT_H
|
||||
#include "UiComponent.h"
|
||||
#include "UiRenderBundle.h"
|
||||
#include "../../../renderer/components/UiRenderBundle.h"
|
||||
#include "glm/vec3.hpp"
|
||||
|
||||
class Font;
|
||||
|
||||
@ -7,7 +7,7 @@
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
|
||||
#include "../core/gui/uiComponent/UiRenderBundle.h"
|
||||
#include "components/UiRenderBundle.h"
|
||||
#include "../toolbox/MathUtils.h"
|
||||
#include "loader/Loader.h"
|
||||
|
||||
|
||||
@ -7,7 +7,7 @@
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
#include "../core/gui/uiComponent/UiRenderBundle.h"
|
||||
#include "components/UiRenderBundle.h"
|
||||
#include "model/GUITexture.h"
|
||||
#include "model/RawModel.h"
|
||||
#include "shaders/GUIShader.h"
|
||||
|
||||
@ -9,74 +9,6 @@
|
||||
#include "../core/gui/text/Font.h"
|
||||
#include "glm/ext/matrix_clip_space.hpp"
|
||||
|
||||
void TextRenderer::renderTexts(const std::vector<UiText*> &textsToRender) {
|
||||
shader.start();
|
||||
shader.loadProjectionMatrix(calculateOrthographicProjectionMatrix());
|
||||
glEnable(GL_BLEND);
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
for (const auto &text : textsToRender) {
|
||||
renderText(*text);
|
||||
}
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
glDisable(GL_BLEND);
|
||||
shader.stop();
|
||||
}
|
||||
|
||||
void TextRenderer::renderText(const UiText &textToRender) {
|
||||
const Dimensions& d = textToRender.uiPositioner.screenSpace;
|
||||
|
||||
const Font& font = textToRender.getFont();
|
||||
const std::string& text = textToRender.getText();
|
||||
|
||||
float screenX = d.x * Application::getInstance().getWindow().GetWidth();
|
||||
float screenY = (1.f - d.y) * Application::getInstance().getWindow().GetHeight();
|
||||
|
||||
float x = screenX;
|
||||
float y = screenY - font.getLineHeight();
|
||||
|
||||
float scale = 1.0f;
|
||||
shader.loadTextColor(textToRender.getColor());
|
||||
for (char c : text) {
|
||||
const Font::Character& ch = font.getCharacter(c);
|
||||
|
||||
float xpos = x + static_cast<float>(ch.bearing.x) * scale;
|
||||
float ypos = y - static_cast<float>(ch.size.y - ch.bearing.y) * scale;
|
||||
|
||||
float w = static_cast<float>(ch.size.x) * scale;
|
||||
float h = static_cast<float>(ch.size.y) * scale;
|
||||
|
||||
float vertices[6][4] = {
|
||||
{ xpos, ypos + h, 0.0f, 0.0f },
|
||||
{ xpos, ypos, 0.0f, 1.0f },
|
||||
{ xpos + w, ypos, 1.0f, 1.0f },
|
||||
|
||||
{ xpos, ypos + h, 0.0f, 0.0f },
|
||||
{ xpos + w, ypos, 1.0f, 1.0f },
|
||||
{ xpos + w, ypos + h, 1.0f, 0.0f }
|
||||
};
|
||||
|
||||
glBindVertexArray(textModel.vaoID);
|
||||
glEnableVertexAttribArray(0);
|
||||
|
||||
glActiveTexture(GL_TEXTURE0);
|
||||
glBindTexture(GL_TEXTURE_2D, ch.textureID);
|
||||
|
||||
|
||||
glBindBuffer(GL_ARRAY_BUFFER, textModel.vboID);
|
||||
glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(vertices), vertices);
|
||||
|
||||
glDrawArrays(GL_TRIANGLES, 0, 6);
|
||||
|
||||
x+= static_cast<float>(ch.advance >> 6) * scale;
|
||||
|
||||
glBindVertexArray(0);
|
||||
glDisableVertexAttribArray(0);
|
||||
}
|
||||
|
||||
glBindTexture(GL_TEXTURE_2D, 0);
|
||||
}
|
||||
|
||||
void TextRenderer::renderGuiTexts(const std::vector<std::shared_ptr<GUIText>> &texts) {
|
||||
shader.start();
|
||||
shader.loadProjectionMatrix(calculateOrthographicProjectionMatrix());
|
||||
|
||||
@ -16,10 +16,6 @@
|
||||
class TextRenderer {
|
||||
public:
|
||||
TextRenderer() : textModel(Loader::instance().loadTextModel()) {};
|
||||
void renderTexts(const std::vector<UiText *> &textsToRender);
|
||||
|
||||
void renderText(const UiText &textToRender);
|
||||
|
||||
void renderGuiTexts(const std::vector<std::shared_ptr<GUIText>> & texts);
|
||||
void renderGuiText(const GUIText& text);
|
||||
|
||||
|
||||
@ -7,18 +7,14 @@
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
#include "../../../renderer/model/GUIText.h"
|
||||
#include "../model/GUIText.h"
|
||||
|
||||
class UiText;
|
||||
#include "../../../renderer/model/GUITexture.h"
|
||||
#include "../model/GUITexture.h"
|
||||
|
||||
|
||||
class UiRenderBundle {
|
||||
public:
|
||||
void addText(UiText* text) {
|
||||
texts.push_back(text);
|
||||
}
|
||||
|
||||
void addGUITexture(const std::shared_ptr<GUITexture>& guiTexture) {
|
||||
guiImages.push_back(guiTexture);
|
||||
}
|
||||
@ -27,10 +23,6 @@ public:
|
||||
return guiImages;
|
||||
}
|
||||
|
||||
std::vector<UiText*> getTexts() {
|
||||
return texts;
|
||||
}
|
||||
|
||||
void addGUIText(const std::shared_ptr<GUIText>& guiText) {
|
||||
guiTexts.push_back(guiText);
|
||||
}
|
||||
@ -41,7 +33,6 @@ public:
|
||||
|
||||
private:
|
||||
std::vector<std::shared_ptr<GUITexture>> guiImages;
|
||||
std::vector<UiText*> texts;
|
||||
std::vector<std::shared_ptr<GUIText>> guiTexts;
|
||||
|
||||
|
||||
@ -151,9 +151,6 @@ void UILayer::onUpdate() {
|
||||
auto guis = renderBundle.getGUITextures();
|
||||
guiRenderer->render(guis);
|
||||
|
||||
auto texts = renderBundle.getTexts();
|
||||
textRenderer->renderTexts(texts);
|
||||
|
||||
auto renderTexts = renderBundle.getGUITexts();
|
||||
textRenderer->renderGuiTexts(renderTexts);
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user