diff --git a/include/Cubed/renderer.hpp b/include/Cubed/renderer.hpp index bdfedf6..8baed46 100644 --- a/include/Cubed/renderer.hpp +++ b/include/Cubed/renderer.hpp @@ -12,7 +12,7 @@ class TextureManager; class World; class Renderer { public: - constexpr static int NUM_VAO = 1; + constexpr static int NUM_VAO = 5; Renderer(const Camera& camera, World& world, const TextureManager& texture_manager); ~Renderer(); diff --git a/src/renderer.cpp b/src/renderer.cpp index 3e3a796..b005eaa 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -71,7 +71,6 @@ void Renderer::init() { m_vao.resize(NUM_VAO); glGenVertexArrays(NUM_VAO, m_vao.data()); - glBindVertexArray(m_vao[0]); glBindVertexArray(0); glGenBuffers(1, &m_outline_vbo); @@ -81,7 +80,6 @@ void Renderer::init() { glGenBuffers(1, &m_outline_indices_vbo); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_outline_indices_vbo); glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(OUTLINE_CUBE_INDICES), OUTLINE_CUBE_INDICES, GL_STATIC_DRAW); - glGenBuffers(1, &m_sky_vbo); glBindBuffer(GL_ARRAY_BUFFER, m_sky_vbo); glBufferData(GL_ARRAY_BUFFER, sizeof(VERTICES_POS), VERTICES_POS, GL_STATIC_DRAW); @@ -118,16 +116,18 @@ void Renderer::render() { glClearColor(0.0, 0.0, 0.0, 1.0); glClear(GL_COLOR_BUFFER_BIT); glClear(GL_DEPTH_BUFFER_BIT); + glBindVertexArray(m_vao[0]); render_sky(); - + glBindVertexArray(m_vao[1]); render_world(); - + glBindVertexArray(m_vao[2]); render_outline(); - + glBindVertexArray(m_vao[3]); render_ui(); - + glBindVertexArray(m_vao[4]); render_text(); + glBindVertexArray(0); } void Renderer::render_outline() { @@ -159,10 +159,10 @@ void Renderer::render_outline() { } void Renderer::render_sky() { + const auto& shader = get_shader("sky"); shader.use(); - m_mv_loc = shader.loc("mv_matrix"); m_proj_loc = shader.loc("proj_matrix"); @@ -178,6 +178,7 @@ void Renderer::render_sky() { glEnableVertexAttribArray(0); glDisable(GL_DEPTH_TEST); + glDrawArrays(GL_TRIANGLES, 0, 36); glEnable(GL_DEPTH_TEST); @@ -191,12 +192,16 @@ void Renderer::render_text() { m_proj_loc = shader.loc("projection"); glUniformMatrix4fv(m_proj_loc, 1, GL_FALSE, glm::value_ptr(m_ui_proj)); + Font::render_text(shader, std::string{"FPS: " + std::to_string(static_cast(App::get_fps()))}, 0.0f, 50.0f, 1.0f, glm::vec3(1.0f, 1.0f, 1.0f)); + Font::render_text(shader, "Version: v0.0.1-Debug", 0.0f, 100.0f, 0.8f, glm::vec3(1.0f, 1.0f, 1.0f)); + const auto& player = m_world.get_player("TestPlayer"); const auto& pos = player.get_player_pos(); std::string player_pos = std::format("x: {:.2f} y: {:.2f} z: {:.2f}", pos.x, pos.y, pos.z); Font::render_text(shader, player_pos, 0.0f, 150.0f, 0.8f, glm::vec3(1.0f, 1.0f, 1.0f)); + glEnable(GL_DEPTH_TEST); } diff --git a/src/tools/font.cpp b/src/tools/font.cpp index 300b8b0..2f420ab 100644 --- a/src/tools/font.cpp +++ b/src/tools/font.cpp @@ -2,6 +2,7 @@ #include #include #include +#include @@ -96,7 +97,6 @@ void Font::render_text(const Shader& shader, const std::string& text, float x, f glUniform3f(shader.loc("textColor"), color.x, color.y, color.z); glActiveTexture(GL_TEXTURE0); - std::vector vertices; for (char8_t c : text) { @@ -136,7 +136,7 @@ void Font::render_text(const Shader& shader, const std::string& text, float x, f glEnableVertexAttribArray(1); glEnableVertexAttribArray(2); - glDrawArrays(GL_TRIANGLES, 0, vertices.size() * 6); + glDrawArrays(GL_TRIANGLES, 0, vertices.size()); glBindBuffer(GL_ARRAY_BUFFER, 0); glBindTexture(GL_TEXTURE_2D_ARRAY, 0); glDeleteBuffers(1, &vbo);