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