diff --git a/src/handlers/button_handler.cpp b/src/handlers/button_handler.cpp index 1a23c8a6bfba1d1f9c4fc93afcac12b5f0633746..df4837f22521d342ef963d8b48bbe9645942ccb5 100644 --- a/src/handlers/button_handler.cpp +++ b/src/handlers/button_handler.cpp @@ -37,7 +37,6 @@ 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); } } \ No newline at end of file diff --git a/src/presenter.cpp b/src/presenter.cpp index 2094b4eec822c89418090cc41e8fc849763c12c1..8b9d671f8ce9a12fa4a06d0b4d5408d2393bea47 100644 --- a/src/presenter.cpp +++ b/src/presenter.cpp @@ -26,6 +26,15 @@ Presenter::Presenter() Presenter::~Presenter() {} +com::Folder* ambient_light() { + static com::Folder *ambient_light = nullptr; + + if (ambient_light == nullptr) + ambient_light = gfx::light_system()->insert_light<gfx::AmbientLight>( + { gfx::AmbientLight::glsl::u_name(), "ambient" }, nullptr, vec3{ 0.1, 1, 0.5 }); + return ambient_light; +} + static const std::string default_vertex_shader = R"( #version 330 core @@ -51,7 +60,6 @@ void main() } )"; - void Presenter::initialize() { osi::presenters()->push_back<com::Folder>("maker")->push_back<com::Link>(self_name() + ".link", this); @@ -60,13 +68,23 @@ void Presenter::initialize() 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); + + // Create a new shader graph + auto shader = gfx::shader_system()->insert_shader<Graph>( + { "text_shaders" }, + "consolas_shader", + Graph::UNLIT + ); + + Graph::TextureNode* textureNode = shader->insert<Graph::TextureNode>(com::ContextPath{"age", "texture", "font", "Consolas_16.png"}); + Graph::NodeVaryingTexcoord* uvCoordNode = shader->insert<Graph::NodeVaryingTexcoord>(); + + shader->connect(textureNode, Graph::TextureNode::inputs::tex_coord, uvCoordNode, 0); + + shader->connect(shader->root(), Graph::MasterNodeUnlit::inputs::color, textureNode, 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::Material* consolas_material = gfx::material_system()->insert_material("consolas_material", shader, {"materials"}); gfx::MonoFontProps font_props; gfx::load_font_mono_props(std::filesystem::canonical(osi::data()->dir()) / "age"/ "font" / "Consolas_16.txt", font_props); @@ -81,48 +99,65 @@ void Presenter::initialize() ); // --- BEGIN test_box --- - //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); + 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 --- // UI // Create gfx/ui/ and maker/ui/ folders - gfx::UiElement* ui_elem1 = gfx::ui_system()->insert_element("ui_elem1"); - gfx::UiElement* ui_elem2 = gfx::ui_system()->insert_element("ui_elem2"); + gfx::Button* ui_elem1 = gfx::ui_generators()->create_ui_button("ui_elem1", {}); + gfx::Button* ui_elem2 = gfx::ui_generators()->create_ui_button("ui_elem2", {}); com::Folder* ui_elem_folder1 = root()->push_back<com::Folder>(ui_elem1->name()); com::Folder* ui_elem_folder2 = root()->push_back<com::Folder>(ui_elem2->name()); gfx::ui_system()->set_parent(ui_elem1, camera_frame()); gfx::ui_system()->set_parent(ui_elem2, camera_frame()); - // 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}); - gfx::ui_system()->get_transform(ui_elem1)->set_scale(vec2{ 0.01f, 0.005f}); + gfx::ui_system()->get_transform(ui_elem1)->set_position(vec2{ 5.0f, 5.0f }); + gfx::ui_system()->get_transform(ui_elem1)->set_scale(vec2{ 0.25f, 0.35f}); gfx::ui_system()->get_transform(ui_elem2)->set_position(vec2{ -0.03f, 0.04f}); - gfx::ui_system()->get_transform(ui_elem2)->set_scale(vec2{ 0.01f, 0.005f}); + gfx::ui_system()->get_transform(ui_elem2)->set_scale(vec2{ 0.01f, 0.05f}); + + // Create buffer + gfx::Buffer* ui_buffer = gfx::buffer_generators()->insert_procedural_rectangle({ 1.0f, 1.0f }, "ui_buffer", { "ui" }); + gfx::Buffer* ui_text_buffer1 = gfx::buffer_generators()->insert_procedural_text_rectangle( + "01234", + font_props, + gfx::ui_system()->get_transform(ui_elem1)->get_aabb().hi.x - gfx::ui_system()->get_transform(ui_elem1)->get_aabb().lo.x, + 255U, + true, + true, + "button_1_text" + ); + gfx::Buffer* ui_text_buffer2 = gfx::buffer_generators()->insert_procedural_text_rectangle( + "01234", + font_props, + gfx::ui_system()->get_transform(ui_elem2)->get_aabb().hi.x - gfx::ui_system()->get_transform(ui_elem2)->get_aabb().lo.x, + 255U, + true, + true, + "button_2_text" + ); // Insert UI elements into object system - 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); + auto ui_elem_object1 = gfx::ui_system()->insert_object(ui_elem1, ui_elem_folder1, consolas_material, ui_text_buffer1); + auto ui_elem_object2 = gfx::ui_system()->insert_object(ui_elem2, ui_elem_folder2, consolas_material, ui_text_buffer2); // --- BEGIN directional light --- @@ -132,6 +167,11 @@ void Presenter::initialize() frame_light, vec4{ 0.75f, 0.75f, 0.75f, 1 } ); + com::Folder* const ambient_light = gfx::light_system()->insert_light<gfx::AmbientLight>( + { "global", "ambient" }, + frame_light, + vec4{ 1.0f, 1.0f, 1.0f, 1 } + ); // --- END directional light --- @@ -142,8 +182,9 @@ 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::object_system()->insert_light(test_box, ambient_light); + gfx::light_system()->insert_shadow_caster(dir_light, test_box); print_tree(*gfx::root(), std::cout); print_tree(*mak::root(), std::cout);