From f878b520b736efb8c681875a3d44ec62c64002b2 Mon Sep 17 00:00:00 2001
From: Filip Vincze <vincze.filip@gmail.com>
Date: Tue, 30 Apr 2024 09:12:10 +0200
Subject: [PATCH] Add new shaders

---
 src/handlers/button_handler.cpp |  2 +
 src/presenter.cpp               | 97 ++++++++++++++++++++++++---------
 2 files changed, 72 insertions(+), 27 deletions(-)

diff --git a/src/handlers/button_handler.cpp b/src/handlers/button_handler.cpp
index e74e729..1a23c8a 100644
--- a/src/handlers/button_handler.cpp
+++ b/src/handlers/button_handler.cpp
@@ -35,6 +35,8 @@ namespace mak {
         }
         
         // Set object color
+        // Figure out a way to change 
+        //gfx::object_system()->get_material(object_folder)->set_uniform("color", color);
         gfx::object_system()->get_uniforms(object_folder)->find<com::FileVec3>("material_ambient_color")->set(color);
     }
 
diff --git a/src/presenter.cpp b/src/presenter.cpp
index cd480fa..2094b4e 100644
--- a/src/presenter.cpp
+++ b/src/presenter.cpp
@@ -2,17 +2,23 @@
 #include <maker/index.hpp>
 #include <maker/handlers/button_handler.hpp>
 #include <gfx/index.hpp>
+#include <gfx/ui/transform.hpp>
+#include <gfx/text_shader.hpp>
+#include <gfx/font.hpp>
+#include <gfx/buffer_generators.hpp>
 #include <osi/index.hpp>
 #include <com/math_files.hpp>
 #include <utils/context_utils.hpp>
-#include <gfx/ui/transform.hpp>
 #include <iostream>
 #include <sstream>
 #include <fstream>
-#include <gfx/text_generator.hpp>
 
 namespace mak {
 
+typedef gfx::ShaderGraph::Node::DataType::ElementType ElementType;
+typedef gfx::ShaderGraph Graph;
+typedef gfx::ShaderGraph::Node::SlotDefinition Slot;
+
 Presenter::Presenter()
     : com::Runner{ self_name() }
 {}
@@ -20,37 +26,76 @@ Presenter::Presenter()
 Presenter::~Presenter()
 {}
 
+static const std::string default_vertex_shader = R"(
+#version 330 core
+
+layout(location = 0) in vec3 vertex_position;
+uniform mat4 model;
+uniform mat4 view;
+uniform mat4 projection;
+
+void main()
+{
+    gl_Position = projection * view * model * vec4(vertex_position, 1.);
+}
+)";
+
+static const std::string default_fragment_shader = R"(
+#version 330 core
+
+out vec4 fragColor;
+
+void main()
+{
+    fragColor = vec4(0.2, 0.8, 1., 1.);
+}
+)";
+
+
 void Presenter::initialize()
 {
     osi::presenters()->push_back<com::Folder>("maker")->push_back<com::Link>(self_name() + ".link", this);
 
-    gfx::Shader* forward_uniform_color_shader =  gfx::shader_generators()->insert_shader_forward_uniform_color();
+    gfx::Shader* text_shader =  gfx::shader_system()->insert_shader<gfx::TextShader>({ "shaders" } , "default_text_shader", gfx::Shader::UNLIT,
+                                                                                     default_vertex_shader, default_fragment_shader);
+
+    Graph* default_shader = dynamic_cast<Graph*>(gfx::shader_system()->default_shader());
+    //auto tex_coords = default_shader->insert<Graph::NodeVaryingTexcoord>();
+    //auto specular = default_shader->insert<Graph::TextureNode>(
+        //com::ContextPath{ "age", "texture", "font", "Consolas_16.png" });
+    //default_shader->connect(specular, Graph::TextureNode::inputs::tex_coord, tex_coords, 0);
+
+    gfx::Material* tex_material = gfx::material_system()->insert_material("box_material", text_shader, {"materials"});
+    gfx::Material* text_material = gfx::material_system()->insert_material("text_material", default_shader, {"materials"});
+
+    gfx::MonoFontProps font_props;
+    gfx::load_font_mono_props(std::filesystem::canonical(osi::data()->dir()) / "age"/ "font" / "Consolas_16.txt", font_props);
 
     gfx::object_system()->push_frame_back(
         gfx::object_system()->insert_object(
             { "grid" },
-            gfx::shader_generators()->insert_shader_forward_varying_color(),
+            tex_material,
             gfx::buffer_generators()->insert_procedural_grid()
             ),
         grid_frame()
         );
 
     // --- BEGIN test_box ---
-    com::Folder* const test_box = gfx::object_system()->insert_object(
-            { "maker", "test_box" },
-            forward_uniform_color_shader,
-            gfx::buffer_generators()->insert_procedural_box_solid({ 0.5f, 0.5f, 0.5f } , "test_box", { "maker" })
-            );
-    gfx::object_system()->push_frame_back(
-        test_box ,
-        root()->push_back<com::Folder>("test_box")->push_back<com::Frame>()
-        );
-    gfx::object_system()->get_uniforms(test_box)->push_back<com::FileVec3>("material_ambient_color", vec3{ 0.75f, 0.75f, 0 });
-
-    // The second instance
-    com::Frame* const frame2 = root()->push_back<com::Folder>("test_box_2")->push_back<com::Frame>();
-    frame2->move_origin({ 0.5f, 0, 1.5f });
-    gfx::object_system()->push_frame_back(test_box, frame2);
+    //com::Folder* const test_box = gfx::object_system()->insert_object(
+            //{ "maker", "test_box" },
+            //tex_material,
+            //gfx::buffer_generators()->insert_procedural_box_solid({ 0.5f, 0.5f, 0.5f } , "test_box", { "maker" })
+            //);
+    //gfx::object_system()->push_frame_back(
+        //test_box ,
+        //root()->push_back<com::Folder>("test_box")->push_back<com::Frame>()
+        //);
+    //gfx::object_system()->get_uniforms(test_box)->push_back<com::FileVec3>("material_ambient_color", vec3{ 0.75f, 0.75f, 0 });
+
+    //// The second instance
+    //com::Frame* const frame2 = root()->push_back<com::Folder>("test_box_2")->push_back<com::Frame>();
+    //frame2->move_origin({ 0.5f, 0, 1.5f });
+    //gfx::object_system()->push_frame_back(test_box, frame2);
 
     // --- END test_box ---
 
@@ -66,6 +111,7 @@ void Presenter::initialize()
 
     // Create buffer
     gfx::Buffer* ui_buffer = gfx::buffer_generators()->insert_procedural_rectangle({ 1.0f, 1.0f }, "ui_buffer", { "ui" });
+    gfx::Buffer* ui_text_buffer = gfx::buffer_generators()->insert_procedural_text_rectangle("01234", font_props, 10000.0f);
 
     // Set variables
     gfx::ui_system()->get_transform(ui_elem1)->set_position(vec2{ 0.03f, 0.02f});
@@ -75,8 +121,8 @@ void Presenter::initialize()
     gfx::ui_system()->get_transform(ui_elem2)->set_scale(vec2{ 0.01f, 0.005f});
 
     // Insert UI elements into object system
-    gfx::ui_system()->insert_object(ui_elem1, ui_elem_folder1, forward_uniform_color_shader, ui_buffer);
-    gfx::ui_system()->insert_object(ui_elem2, ui_elem_folder2, forward_uniform_color_shader, ui_buffer);
+    gfx::ui_system()->insert_object(ui_elem1, ui_elem_folder1, text_material, ui_buffer);
+    gfx::ui_system()->insert_object(ui_elem2, ui_elem_folder2, text_material, ui_buffer);
 
     // --- BEGIN directional light ---
 
@@ -96,14 +142,11 @@ void Presenter::initialize()
 
     // END handlers
 
-    gfx::object_system()->insert_light(test_box, dir_light);
-    gfx::light_system()->insert_shadow_caster(dir_light, test_box);
+    //gfx::object_system()->insert_light(test_box, dir_light);
+    //gfx::light_system()->insert_shadow_caster(dir_light, test_box);
     print_tree(*gfx::root(), std::cout);
     print_tree(*mak::root(), std::cout);
 
-    std::shared_ptr<gfx::font_mono_props>  props = std::make_shared<gfx::font_mono_props>();
-
-    gfx::load_font_mono_props(std::filesystem::canonical(osi::data()->dir()) / "age" / "font" / "Consolas_16.txt", *props);
 }
 
 void Presenter::release()
@@ -119,7 +162,7 @@ void Presenter::release()
 void Presenter::next_round()
 {
     gfx::renderer()->clear_render_buffers();
-    gfx::renderer()->present_collection(gfx::object_system()->objects());
+    gfx::renderer()->present_collection(gfx::object_system()->objects(), gfx::Renderer::pipeline::FORWARD);
 }
 
 }
-- 
GitLab