From 3231f747a916088c2ae7e56e67a0c4f9d1c7e04f Mon Sep 17 00:00:00 2001 From: "Zed A. Shaw" Date: Sat, 12 Sep 2026 17:14:00 -0400 Subject: [PATCH] Now rendering fonts separately from the scene render. --- 32-text-rendering/src/main.cpp | 15 +++++++++++++-- 32-text-rendering/src/scene.cpp | 4 +--- 32-text-rendering/src/scene.hpp | 2 -- 32-text-rendering/src/text.cpp | 2 +- 32-text-rendering/src/text.hpp | 8 ++++++-- 5 files changed, 21 insertions(+), 10 deletions(-) diff --git a/32-text-rendering/src/main.cpp b/32-text-rendering/src/main.cpp index 58b9731..6fa93cc 100644 --- a/32-text-rendering/src/main.cpp +++ b/32-text-rendering/src/main.cpp @@ -119,8 +119,18 @@ void update(GLFWwindow* window, Scene& scene) { scene.update(); } -void render(GLFWwindow* window, Scene& scene) { +void render(GLFWwindow* window, Scene& scene, Text& text) { scene.render(window); + float scale = 0.5f; + + float X_height = text.characters['X'].size.y * scale + 0.5f; + float y = 0.0f; + + for(int i = 0; i < 100; i++) { + y += X_height; + text.render(std::format("y={}", y), 25.0f, y, scale, glm::vec3(1.0, 0.0f, 0.0f)); + } + glfwSwapBuffers(window); } @@ -134,12 +144,13 @@ int main() { auto window = create_window(); auto scene = setup(); + Text text; glfwSetWindowUserPointer(window, &scene); while(!glfwWindowShouldClose(window)) { update(window, scene); - render(window, scene); + render(window, scene, text); } quit(window, scene); diff --git a/32-text-rendering/src/scene.cpp b/32-text-rendering/src/scene.cpp index 8920069..b5baeeb 100644 --- a/32-text-rendering/src/scene.cpp +++ b/32-text-rendering/src/scene.cpp @@ -57,9 +57,7 @@ void Scene::render(GLFWwindow* window) { draw_thing(with_shader, thing); } - text.render_text("This is A Test", 25.0f, 25.0f, 1.0f, glm::vec3(0.5, 0.8f, 0.2f)); - - // render_skybox(projection); + render_skybox(projection); framebuffer.commit(); diff --git a/32-text-rendering/src/scene.hpp b/32-text-rendering/src/scene.hpp index c9ef0ff..1896309 100644 --- a/32-text-rendering/src/scene.hpp +++ b/32-text-rendering/src/scene.hpp @@ -46,7 +46,6 @@ struct Scene { unsigned int skyboxVBO = UINT_MAX; unsigned int skybox_texture_id = UINT_MAX; bool reflect_on = false; - Text text; Scene(components::Scene& config): shader{config.shader}, @@ -91,7 +90,6 @@ struct Scene { framebuffer.init(); screen.init(); - text.load_font(); init_skybox(); } diff --git a/32-text-rendering/src/text.cpp b/32-text-rendering/src/text.cpp index 1db8adf..3ebd792 100644 --- a/32-text-rendering/src/text.cpp +++ b/32-text-rendering/src/text.cpp @@ -8,7 +8,7 @@ #include #include FT_FREETYPE_H -void Text::render_text(const std::string& text, float x, float y, float scale, glm::vec3 color) { +void Text::render(const std::string& text, float x, float y, float scale, glm::vec3 color) { text_shader.use(); glm::mat4 projection = glm::ortho(0.0f, static_cast(SCR_WIDTH), 0.0f, static_cast(SCR_HEIGHT)); text_shader.setMat4("projection", projection); diff --git a/32-text-rendering/src/text.hpp b/32-text-rendering/src/text.hpp index f9b8c45..a32ae68 100644 --- a/32-text-rendering/src/text.hpp +++ b/32-text-rendering/src/text.hpp @@ -12,12 +12,16 @@ struct Character { }; struct Text { + std::string font{"assets/fonts/text.ttf"}; Shader text_shader{{"shaders/32-text.vert.glsl", "shaders/32-text.frag.glsl", ""}}; unsigned int text_vao = UINT_MAX; unsigned int text_vbo = UINT_MAX; - std::string font{"assets/fonts/text.ttf"}; std::unordered_map characters; - void render_text(const std::string& text, float x, float y, float scale, glm::vec3 color); + Text() { + load_font(); + } + + void render(const std::string& text, float x, float y, float scale, glm::vec3 color); void load_font(); };