Major cleanup.
Moved to namespace Cleanup includes
This commit is contained in:
@@ -1,137 +1,140 @@
|
||||
#include "Renderer2D.h"
|
||||
#include "GL/glew.h"
|
||||
#include "../Core/Maths.h"
|
||||
#include <Engine.h>
|
||||
#include "src/UI/Nodes/TextNode.h"
|
||||
|
||||
#include "../UI/Nodes/TextNode.h"
|
||||
Ref<Shader> Renderer2D::UIShader;
|
||||
Ref<Shader> Renderer2D::TextShader;
|
||||
|
||||
unsigned int Renderer2D::VAO;
|
||||
unsigned int Renderer2D::VBO;
|
||||
|
||||
Matrix4 Renderer2D::Projection;
|
||||
|
||||
void Renderer2D::Init()
|
||||
namespace Nuake
|
||||
{
|
||||
UIShader = CreateRef<Shader>("resources/Shaders/ui.shader");
|
||||
TextShader = CreateRef<Shader>("resources/Shaders/sdf_text.shader");
|
||||
Ref<Shader> Renderer2D::UIShader;
|
||||
Ref<Shader> Renderer2D::TextShader;
|
||||
|
||||
float quad_Vertices[] = {
|
||||
// positions // texture Coords
|
||||
0.0f, 0.0f, 1.0f, 0.0f, 0.0f,
|
||||
1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
|
||||
0.0f, 1.0f, 1.0f, 0.0f, 1.0f,
|
||||
1.0f, 0.0f, 1.0f, 1.0f, 0.0f,
|
||||
0.0f, 0.0f, 1.0f, 0.0f, 0.0f,
|
||||
1.0f, 1.0f, 1.0f, 1.0f, 1.0f
|
||||
};
|
||||
// setup plane VAO
|
||||
glGenVertexArrays(1, &Renderer2D::VAO);
|
||||
glGenBuffers(1, &Renderer2D::VBO);
|
||||
glBindVertexArray(Renderer2D::VAO);
|
||||
glBindBuffer(GL_ARRAY_BUFFER, Renderer2D::VBO);
|
||||
glBufferData(GL_ARRAY_BUFFER, sizeof(quad_Vertices), &quad_Vertices, GL_STATIC_DRAW);
|
||||
glEnableVertexAttribArray(0);
|
||||
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void*)0);
|
||||
glEnableVertexAttribArray(1);
|
||||
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void*)(3 * sizeof(float)));
|
||||
}
|
||||
unsigned int Renderer2D::VAO;
|
||||
unsigned int Renderer2D::VBO;
|
||||
|
||||
void Renderer2D::BeginDraw(Vector2 size)
|
||||
{
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
Projection = glm::ortho(0.f, size.x, size.y, 0.f, -0.5f, 1000.0f);
|
||||
UIShader->Bind();
|
||||
UIShader->SetUniformMat4f("projection", Projection);
|
||||
}
|
||||
Matrix4 Renderer2D::Projection;
|
||||
|
||||
void Renderer2D::DrawRect()
|
||||
{
|
||||
glBindVertexArray(Renderer2D::VAO);
|
||||
glDrawArrays(GL_TRIANGLES, 0, 6);
|
||||
}
|
||||
void Renderer2D::Init()
|
||||
{
|
||||
UIShader = CreateRef<Shader>("resources/Shaders/ui.shader");
|
||||
TextShader = CreateRef<Shader>("resources/Shaders/sdf_text.shader");
|
||||
|
||||
Vector2 Renderer2D::CalculateStringSize(const std::string& str, Ref<Font> font, Vector2 position, float fontSize)
|
||||
{
|
||||
float advance = 0.0f;
|
||||
float Y = 0.0f;
|
||||
for (char const& c : str) {
|
||||
Char& letter = font->GetChar((int)c);
|
||||
advance += letter.Advance * fontSize;
|
||||
if(letter.PlaneBounds.top - letter.PlaneBounds.bottom > Y)
|
||||
Y = letter.PlaneBounds.top - letter.PlaneBounds.bottom;
|
||||
}
|
||||
return Vector2(advance, Y);
|
||||
}
|
||||
|
||||
void Renderer2D::DrawString(const std::string& str, TextStyle style, Matrix4 model)
|
||||
{
|
||||
|
||||
TextShader->Bind();
|
||||
TextShader->SetUniformMat4f("projection", Projection);
|
||||
float advance = 0.0f;
|
||||
style.font->FontAtlas->Bind(5);
|
||||
TextShader->SetUniform1i("msdf", 5);
|
||||
|
||||
|
||||
float lineHeight = 0.0f;
|
||||
for (char const& c : str) {
|
||||
Char& letter = style.font->GetChar((int)c);
|
||||
|
||||
if (letter.PlaneBounds.top - letter.PlaneBounds.bottom > lineHeight)
|
||||
lineHeight = letter.PlaneBounds.top - letter.PlaneBounds.bottom ;
|
||||
float quad_Vertices[] = {
|
||||
// positions // texture Coords
|
||||
0.0f, 0.0f, 1.0f, 0.0f, 0.0f,
|
||||
1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
|
||||
0.0f, 1.0f, 1.0f, 0.0f, 1.0f,
|
||||
1.0f, 0.0f, 1.0f, 1.0f, 0.0f,
|
||||
0.0f, 0.0f, 1.0f, 0.0f, 0.0f,
|
||||
1.0f, 1.0f, 1.0f, 1.0f, 1.0f
|
||||
};
|
||||
// setup plane VAO
|
||||
glGenVertexArrays(1, &Renderer2D::VAO);
|
||||
glGenBuffers(1, &Renderer2D::VBO);
|
||||
glBindVertexArray(Renderer2D::VAO);
|
||||
glBindBuffer(GL_ARRAY_BUFFER, Renderer2D::VBO);
|
||||
glBufferData(GL_ARRAY_BUFFER, sizeof(quad_Vertices), &quad_Vertices, GL_STATIC_DRAW);
|
||||
glEnableVertexAttribArray(0);
|
||||
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void*)0);
|
||||
glEnableVertexAttribArray(1);
|
||||
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void*)(3 * sizeof(float)));
|
||||
}
|
||||
|
||||
lineHeight *= style.fontSize;
|
||||
void Renderer2D::BeginDraw(Vector2 size)
|
||||
{
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
Projection = glm::ortho(0.f, size.x, size.y, 0.f, -0.5f, 1000.0f);
|
||||
UIShader->Bind();
|
||||
UIShader->SetUniformMat4f("projection", Projection);
|
||||
}
|
||||
|
||||
for (char const& c : str) {
|
||||
Char& letter = style.font->GetChar((int)c);
|
||||
Matrix4 mat = glm::translate(model, Vector3(advance, -(letter.PlaneBounds.top) + (lineHeight), 0.f));
|
||||
float scaleX = letter.PlaneBounds.right - letter.PlaneBounds.left;
|
||||
float scaleY = letter.PlaneBounds.top - letter.PlaneBounds.bottom;
|
||||
mat = glm::scale(mat, Vector3(scaleX, scaleY, 0.f));
|
||||
void Renderer2D::DrawRect()
|
||||
{
|
||||
glBindVertexArray(Renderer2D::VAO);
|
||||
glDrawArrays(GL_TRIANGLES, 0, 6);
|
||||
}
|
||||
|
||||
Vector2 Renderer2D::CalculateStringSize(const std::string& str, Ref<Font> font, Vector2 position, float fontSize)
|
||||
{
|
||||
float advance = 0.0f;
|
||||
float Y = 0.0f;
|
||||
for (char const& c : str) {
|
||||
Char& letter = font->GetChar((int)c);
|
||||
advance += letter.Advance * fontSize;
|
||||
if (letter.PlaneBounds.top - letter.PlaneBounds.bottom > Y)
|
||||
Y = letter.PlaneBounds.top - letter.PlaneBounds.bottom;
|
||||
}
|
||||
return Vector2(advance, Y);
|
||||
}
|
||||
|
||||
void Renderer2D::DrawString(const std::string& str, TextStyle style, Matrix4 model)
|
||||
{
|
||||
|
||||
TextShader->Bind();
|
||||
TextShader->SetUniformMat4f("projection", Projection);
|
||||
float advance = 0.0f;
|
||||
style.font->FontAtlas->Bind(5);
|
||||
TextShader->SetUniform1i("msdf", 5);
|
||||
|
||||
|
||||
float lineHeight = 0.0f;
|
||||
for (char const& c : str) {
|
||||
Char& letter = style.font->GetChar((int)c);
|
||||
|
||||
if (letter.PlaneBounds.top - letter.PlaneBounds.bottom > lineHeight)
|
||||
lineHeight = letter.PlaneBounds.top - letter.PlaneBounds.bottom;
|
||||
}
|
||||
|
||||
lineHeight *= style.fontSize;
|
||||
|
||||
for (char const& c : str) {
|
||||
Char& letter = style.font->GetChar((int)c);
|
||||
Matrix4 mat = glm::translate(model, Vector3(advance, -(letter.PlaneBounds.top) + (lineHeight), 0.f));
|
||||
float scaleX = letter.PlaneBounds.right - letter.PlaneBounds.left;
|
||||
float scaleY = letter.PlaneBounds.top - letter.PlaneBounds.bottom;
|
||||
mat = glm::scale(mat, Vector3(scaleX, scaleY, 0.f));
|
||||
TextShader->SetUniform2f("texPos", letter.AtlasBounds.Pos.x, letter.AtlasBounds.Pos.y);
|
||||
TextShader->SetUniform2f("texScale", letter.AtlasBounds.Size.x, letter.AtlasBounds.Size.y);
|
||||
TextShader->SetUniformMat4f("model", mat);
|
||||
//TextShader->SetUniform4f("bgColor", 0, 0, 1, 1);
|
||||
TextShader->SetUniform4f("bgColor", 1.f, 0.f, 0.f, 0.f);
|
||||
TextShader->SetUniform4f("fgColor", 1.f, 1.f, 1.f, 1.f);
|
||||
//TextShader->SetUniform1f("pxRange", 32);
|
||||
glBindVertexArray(VAO);
|
||||
glDrawArrays(GL_TRIANGLES, 0, 6);
|
||||
advance += letter.Advance;
|
||||
}
|
||||
}
|
||||
|
||||
void Renderer2D::DrawChar(Char& letter, Ref<Font> font, Vector2 position, Vector2 size)
|
||||
{
|
||||
TextShader->Bind();
|
||||
TextShader->SetUniformMat4f("projection", Projection);
|
||||
|
||||
Matrix4 mat = Matrix4(1.0f);
|
||||
mat = glm::translate(mat, Vector3(position.x, position.y, 0.f));
|
||||
mat = glm::scale(mat, Vector3(letter.AtlasBounds.Size.x, letter.AtlasBounds.Size.y, 0.f));
|
||||
|
||||
//TextShader->SetUniform1f("u_border_radius", 8.1f);
|
||||
//TextShader->SetUniform2f("u_size", 100.f, 100.f);
|
||||
|
||||
font->FontAtlas->Bind(5);
|
||||
//
|
||||
TextShader->SetUniform1i("msdf", 5);
|
||||
TextShader->SetUniform2f("texPos", letter.AtlasBounds.Pos.x, letter.AtlasBounds.Pos.y);
|
||||
TextShader->SetUniform2f("texScale", letter.AtlasBounds.Size.x, letter.AtlasBounds.Size.y);
|
||||
TextShader->SetUniformMat4f("model", mat);
|
||||
//TextShader->SetUniform4f("bgColor", 0, 0, 1, 1);
|
||||
TextShader->SetUniform4f("bgColor", 1.f, 0.f, 0.f, 0.f);
|
||||
TextShader->SetUniform4f("bgColor", 0.f, 0.f, 0.f, 0.f);
|
||||
TextShader->SetUniform4f("fgColor", 1.f, 1.f, 1.f, 1.f);
|
||||
//TextShader->SetUniform1f("pxRange", 32);
|
||||
glBindVertexArray(VAO);
|
||||
glDrawArrays(GL_TRIANGLES, 0, 6);
|
||||
advance += letter.Advance;
|
||||
}
|
||||
|
||||
|
||||
void Renderer2D::EndDraw()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void Renderer2D::DrawChar(Char& letter, Ref<Font> font, Vector2 position, Vector2 size)
|
||||
{
|
||||
TextShader->Bind();
|
||||
TextShader->SetUniformMat4f("projection", Projection);
|
||||
|
||||
Matrix4 mat = Matrix4(1.0f);
|
||||
mat = glm::translate(mat, Vector3(position.x, position.y, 0.f));
|
||||
mat = glm::scale(mat, Vector3(letter.AtlasBounds.Size.x, letter.AtlasBounds.Size.y, 0.f));
|
||||
|
||||
//TextShader->SetUniform1f("u_border_radius", 8.1f);
|
||||
//TextShader->SetUniform2f("u_size", 100.f, 100.f);
|
||||
|
||||
font->FontAtlas->Bind(5);
|
||||
//
|
||||
TextShader->SetUniform1i("msdf", 5);
|
||||
TextShader->SetUniform2f("texPos", letter.AtlasBounds.Pos.x, letter.AtlasBounds.Pos.y);
|
||||
TextShader->SetUniform2f("texScale", letter.AtlasBounds.Size.x, letter.AtlasBounds.Size.y);
|
||||
TextShader->SetUniformMat4f("model", mat);
|
||||
//TextShader->SetUniform4f("bgColor", 0, 0, 1, 1);
|
||||
TextShader->SetUniform4f("bgColor", 0.f, 0.f, 0.f, 0.f);
|
||||
TextShader->SetUniform4f("fgColor", 1.f, 1.f, 1.f, 1.f);
|
||||
//TextShader->SetUniform1f("pxRange", 32);
|
||||
glBindVertexArray(VAO);
|
||||
glDrawArrays(GL_TRIANGLES, 0, 6);
|
||||
}
|
||||
|
||||
|
||||
void Renderer2D::EndDraw()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user