diff --git a/include/maker/presenter.hpp b/include/maker/presenter.hpp index a281896124ac46486921b95271538f2ccc1320e2..db2a6ed86340822aa18c940c750daced420ce8e5 100644 --- a/include/maker/presenter.hpp +++ b/include/maker/presenter.hpp @@ -4,6 +4,8 @@ # include <com/runner.hpp> # include <math/math.hpp> +#include "gfx/camera.hpp" + namespace com { struct Frame; } namespace mak { @@ -20,6 +22,10 @@ struct Presenter : public com::Runner protected: void initialize() override; + void init_scene1(gfx::Camera* camera); + void init_scene2(gfx::Camera* camera); + void init_scene3(gfx::Camera* camera); + void init_scene4(gfx::Camera* camera); void release() override; }; diff --git a/src/presenter.cpp b/src/presenter.cpp index f5e25cf8574717f0b90340c956b177d646edf102..4036f0e0aff0a4602194d78a946c9abb62208a92 100644 --- a/src/presenter.cpp +++ b/src/presenter.cpp @@ -1,16 +1,11 @@ #include <maker/presenter.hpp> #include <maker/index.hpp> -#include <maker/handlers/button_handler.hpp> #include <gfx/index.hpp> -#include <gfx/ui/transform.hpp> +#include <lfs/index.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 <iostream> -#include <sstream> #include <fstream> #include <glm/gtx/string_cast.hpp> @@ -20,6 +15,8 @@ typedef gfx::ShaderGraph::Node::DataType::ElementType ElementType; typedef gfx::ShaderGraph Graph; typedef gfx::ShaderGraph::Node::SlotDefinition Slot; +using namespace gfx; + Presenter::Presenter() : com::Runner{ self_name() } {} @@ -36,75 +33,14 @@ com::Folder* ambient_light() { return ambient_light; } -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* 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* default_shader = dynamic_cast<Graph*>(shader_system()->default_shader()); - // Create a new shader graph - auto shader = gfx::shader_system()->insert_shader<Graph>( - { "text_shaders" }, - "consolas_shader", - Graph::UNLIT, - Graph::PHONG, - Graph::PARTIAL - ); - - gfx::AtlasGlyphProps glyph_props; - gfx::load_true_type_font(osi::data()->dir() / "age" / "font" / "open_sans" / "OpenSans-Regular.ttf", 48U, glyph_props); - //Graph::TextureNode* textureNode = shader->insert<Graph::TextureNode>(com::ContextPath{"age", "texture", "font", "Consolas_16.png"}, ElementType::VEC4); - Graph::TextureNode* textureNode = shader->insert<Graph::TextureNode>(com::ContextPath{"age", "texture", "font", "Open Sans_Regular_48_font_atlas.png"}, ElementType::VEC4); - Graph::NodeVaryingTexcoord* uvCoordNode = shader->insert<Graph::NodeVaryingTexcoord>(); - - Graph::NodeDecomposeVector* decomposeNode = shader->insert<Graph::NodeDecomposeVector>(ElementType::VEC4); - Graph::NodeComposeVector* composeNode = shader->insert<Graph::NodeComposeVector>(ElementType::VEC3); - shader->connect(composeNode, 0, decomposeNode, 0); - shader->connect(composeNode, 1, decomposeNode, 1); - shader->connect(composeNode, 2, decomposeNode, 2); - shader->connect(decomposeNode, 0, textureNode, 0); - - shader->connect(textureNode, Graph::TextureNode::inputs::tex_coord, uvCoordNode, 0); - - shader->connect(shader->root(), Graph::MasterNodeUnlit::inputs::color, composeNode, 0); - shader->connect(shader->root(), Graph::MasterNodeUnlit::inputs::alpha, decomposeNode, 3); - - auto emission = shader->insert<Graph::NodeConstant>(vec3{0.}); - shader->connect(shader->root(), Graph::MasterNodeUnlit::inputs::emission, emission, 0); - - gfx::Material* tex_material = gfx::material_system()->insert_material("box_material", text_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); + Material* tex_material = material_system()->insert_material("box_material", default_shader, {"materials"}); + ui_system()->insert_default_materials(); gfx::object_system()->push_frame_back( gfx::object_system()->insert_object( @@ -113,7 +49,7 @@ void Presenter::initialize() gfx::buffer_generators()->insert_procedural_grid() ), grid_frame() - ); + ); // --- BEGIN test_box --- //com::Folder* const test_box = gfx::object_system()->insert_object( @@ -133,75 +69,26 @@ void Presenter::initialize() //gfx::object_system()->push_frame_back(test_box, frame2); // --- END test_box --- + camera_system()->set_frame(camera_system()->default_camera_folder(), camera_frame()); // UI - - // Create gfx/ui/ and maker/ui/ folders - gfx::Button* ui_elem1 = gfx::ui_generators()->create_ui_button("ui_elem1", {"buttons"}, "text"); - gfx::Button* ui_elem2 = gfx::ui_generators()->create_ui_button("ui_elem2", {"buttons"}, "text1234"); - gfx::TextBox* ui_elem_text_box1 = dynamic_cast<gfx::TextBox*>(ui_elem1->get_child(gfx::Button::text_box_folder_name())); - gfx::TextBox* ui_elem_text_box2 = dynamic_cast<gfx::TextBox*>(ui_elem2->get_child(gfx::Button::text_box_folder_name())); - com::Frame* ui_elem_frame1 = root()->push_back<com::Folder>(ui_elem1->name())->push_back<com::Frame>(); - com::Frame* ui_elem_frame2 = root()->push_back<com::Folder>(ui_elem2->name())->push_back<com::Frame>(); - com::Frame* ui_elem_text_box_frame1 = root()->push_back<com::Folder>(root()->generate_unique_name(gfx::Button::text_box_folder_name()))->push_back<com::Frame>(); - com::Frame* ui_elem_text_box_frame2 = root()->push_back<com::Folder>(root()->generate_unique_name(gfx::Button::text_box_folder_name()))->push_back<com::Frame>(); - - gfx::ui_system()->set_parent(ui_elem1, camera_frame()); - gfx::ui_system()->set_parent(ui_elem2, camera_frame()); - gfx::ui_system()->set_parent(ui_elem_text_box1, ui_elem_frame1); - gfx::ui_system()->set_parent(ui_elem_text_box2, ui_elem_frame2); - - // Set variables - gfx::ui_system()->get_transform(ui_elem1)->set_position(vec2{ 0.7f, 0.7f }); - gfx::ui_system()->get_transform(ui_elem1)->set_scale(vec2{ 0.01f, 0.01f }); - - gfx::ui_system()->get_transform(ui_elem2)->set_position(vec2{ -0.7f, -0.7f}); - gfx::ui_system()->get_transform(ui_elem2)->set_scale(vec2{ 0.01f, 0.01f }); - - gfx::ui_system()->get_transform(ui_elem_text_box1)->set_position(vec2{ 0.00f, 0.00f }); - gfx::ui_system()->get_transform(ui_elem_text_box1)->set_scale(vec2{ 3.0f, 3.0f }); - gfx::ui_system()->get_transform(ui_elem_text_box2)->set_position(vec2{ 0.00f, 0.00f }); - gfx::ui_system()->get_transform(ui_elem_text_box2)->set_scale(vec2{ 0.5f, 0.5f }); - - // 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( - ui_elem_text_box1->get_text() + "12123123", - font_props, - // would like to set it up based on button aabb - 1.0f, - 255U, - true, - true, - "button_1_text" - ); - gfx::Buffer* ui_text_buffer2 = gfx::buffer_generators()->insert_procedural_text_rectangle( - ui_elem_text_box2->get_text(), - font_props, - 10.0f, - 255U, - true, - true, - "button_2_text" - ); + // Camera Setup + Camera* ui_camera = camera_system()->insert_camera({"ui", "camera"}); + ui_camera->set_perspective(false); + camera_system()->set_frame(ui_camera->folder(), ui_system()->get_default_camera_frame()); - gfx::Buffer* ttf_buffer = gfx::buffer_generators()->create_text_buffer( - "text", - glyph_props, - "id" - ); + // Initialize scenes + init_scene1(ui_camera); + init_scene2(ui_camera); + init_scene3(ui_camera); + init_scene4(ui_camera); - //ui_elem1->get_theme()->set_material(gfx::ENABLED, consolas_material); + ui_system()->set_current_scene("scene1"); - // Insert UI elements into object system - auto ui_elem_object1 = gfx::ui_system()->insert_object(ui_elem1, ui_elem_frame1, tex_material, ui_buffer); - auto ui_elem_object2 = gfx::ui_system()->insert_object(ui_elem2, ui_elem_frame2, tex_material, ui_buffer); - gfx::ui_system()->insert_object(ui_elem_text_box1, ui_elem_text_box_frame1, consolas_material, ttf_buffer); - gfx::ui_system()->insert_object(ui_elem_text_box2, ui_elem_text_box_frame2, consolas_material, ui_text_buffer2); // --- BEGIN directional light --- - com::Frame* const frame_light = root()->push_back<com::Folder>("directional_light")->push_back<com::Frame>(); + auto* const frame_light = root()->push_back<com::Folder>("directional_light")->push_back<com::Frame>(); com::Folder* const dir_light = gfx::light_system()->insert_light<gfx::DirectionalLight>( { "global", "directional" }, frame_light, @@ -224,31 +111,219 @@ void Presenter::initialize() std::cout << glm::to_string(gfx::camera_system()->active_camera()->top_right_absolute()) << std::endl; } +void Presenter::init_scene1(Camera* camera) { + auto* scene1 = ui_system()->create_scene("scene1"); + auto* scene1_layer1 = ui_system()->insert_scene_layer_top(scene1, "layer1"); + auto* scene1_default_layer = ui_system()->get_default_scene_layer(scene1); + ui_system()->assign_camera_to_scene(scene1, camera); + auto* scene1_camera_bottom_left_frame = ui_system()->get_scene_frame(scene1); + + auto* check_box = ui_system()->insert_element<CheckBox>("checkbox", scene1, scene1_default_layer, vec2i{50.0f, 50.0f}); + auto* slider = ui_system()->insert_element<Slider>("slider", scene1, scene1_default_layer, vec2i{20.0f, 200.0f}, VERTICAL); + auto* h_slider = ui_system()->insert_element<Slider>("h_slider", scene1, scene1_default_layer, vec2i{200.0f, 20.0f}, HORIZONTAL); + auto* progress_bar = ui_system()->insert_element<ProgressBar>("progress_bar", scene1, scene1_default_layer, vec2i{200.0f, 20.0f}, 0.4f); + Button* button1 = ui_generators()->create_ui_button("ui_elem1", vec2i{100, 50}, scene1, scene1_layer1, "button1"); + // todo maybe move this function into ui generators + button1->request_fonts_to_load("OpenSans", 48U, false, false); + Button* button2 = ui_generators()->create_ui_button("ui_elem2", vec2i{100,100}, scene1, scene1_default_layer, "button2"); + button2->request_fonts_to_load("OpenSans", 48U, false, false); + + auto* list_box = ui_system()->insert_element<ListBox>("list_box", scene1, scene1_default_layer, vec2i(100, 300), vec2i(100, 30)); + auto* list_box_scroll_bar = ui_system()->insert_child_element<Slider>("list_box_slider", list_box, scene1, scene1_default_layer, vec2i(20, 300), 1.0f, VERTICAL); + list_box_scroll_bar->get_transform()->set_anchor(Anchor{0.f, 1.0f, 0.f, 0.f}); + list_box->insert_item(scene1, scene1_default_layer, "text1", 0.3f, "OpenSans", 12U); + list_box->insert_item(scene1, scene1_default_layer, "text2", 0.3f, "OpenSans", 12U); + list_box->insert_item(scene1, scene1_default_layer, "text3", 0.3f, "OpenSans", 12U); + list_box->insert_item(scene1, scene1_default_layer, "text4", 0.3f, "OpenSans", 12U); + list_box->insert_item(scene1, scene1_default_layer, "text5", 0.3f, "OpenSans", 12U); + list_box->insert_item(scene1, scene1_default_layer, "text6", 0.3f, "OpenSans", 12U); + list_box->insert_item(scene1, scene1_default_layer, "text7", 0.3f, "OpenSans", 12U); + list_box->insert_item(scene1, scene1_default_layer, "text8", 0.3f, "OpenSans", 12U); + list_box->insert_item(scene1, scene1_default_layer, "text9", 0.3f, "OpenSans", 12U); + + auto* edit_text_line = ui_system()->insert_element<LineTextEdit>("line_text_edit", scene1, scene1_default_layer, vec2i{100, 48}, "text_edit"); + edit_text_line->request_fonts_to_load("OpenSans", 48U, false, false); + + auto* handlers_folder = root()->push_back<com::Folder>("handlers"); + auto* button_handler = handlers_folder->push_back<ButtonHandler>("button_handler"); + auto* check_box_handler = handlers_folder->push_back<CheckBoxHandler>("check_box_handler"); + auto* interval_handler = handlers_folder->push_back<IntervalHandler>("interval_handler"); + + //check_box->register_handler(check_box_handler); + slider->register_handler(interval_handler); + + ui_system()->set_parent_frame(edit_text_line, scene1_camera_bottom_left_frame); + ui_system()->set_parent_frame(list_box, scene1_camera_bottom_left_frame); + ui_system()->set_parent_frame(button1, scene1_camera_bottom_left_frame); + ui_system()->set_parent_frame(button2, scene1_camera_bottom_left_frame); + ui_system()->set_parent_frame(check_box, scene1_camera_bottom_left_frame); + ui_system()->set_parent_frame(slider, scene1_camera_bottom_left_frame); + ui_system()->set_parent_frame(h_slider, scene1_camera_bottom_left_frame); + ui_system()->set_parent_frame(progress_bar, scene1_camera_bottom_left_frame); + + edit_text_line->get_frame()->set_origin(vec3{ui_system()->get_size_in_meters(nullptr, {100.0f, 100.0f}), 0.0f}); + list_box->get_frame()->set_origin(vec3{ui_system()->get_size_in_meters(nullptr, {850.f, 250.f}), 0.0f}); + button1->get_frame()->set_origin(vec3(ui_system()->get_size_in_meters(nullptr, vec2i(300, 200)), 0.0f)); + button2->get_frame()->set_origin(vec3(ui_system()->get_size_in_meters(nullptr, vec2i(200, 300)), 0.0f)); + check_box->get_frame()->set_origin(vec3(ui_system()->get_size_in_meters(nullptr, vec2i(500, 400)), 0.0f)); + slider->get_frame()->set_origin(vec3(ui_system()->get_size_in_meters(nullptr, vec2i(100, 600)), 0.0f)); + h_slider->get_frame()->set_origin(vec3(ui_system()->get_size_in_meters(nullptr, vec2i(400, 600)), 0.0f)); + progress_bar->get_frame()->set_origin(vec3(ui_system()->get_size_in_meters(nullptr, vec2i(400, 500)), 0.0f)); + + // Insert UI elements into object system + ui_system()->insert_objects(edit_text_line, scene1); + ui_system()->insert_objects(list_box, scene1); + ui_system()->insert_objects(check_box, scene1); + ui_system()->insert_objects(slider, scene1); + ui_system()->insert_objects(h_slider, scene1); + ui_system()->insert_objects(progress_bar, scene1); + ui_system()->insert_objects(button1, scene1); + ui_system()->insert_objects(button2, scene1); +} + +void Presenter::init_scene2(Camera* camera) { + auto* scene2 = ui_system()->create_scene("scene2"); + auto* scene2_default_layer = ui_system()->get_default_scene_layer(scene2); + ui_system()->assign_camera_to_scene(scene2, camera); + auto* scene2_camera_bottom_left_frame = ui_system()->get_scene_frame(scene2); + + auto* tab_bar = ui_system()->insert_element<TabBar>("tab_bar", scene2, scene2_default_layer, vec2i{600, 500}, vec2i{200, 50}); + auto* tab_bar_static_text1 = ui_system()->insert_child_element<StaticText>("tab_bar_text1", tab_bar, scene2, scene2_default_layer, vec2i{500, 400}, "tab bar text1"); + tab_bar_static_text1->request_fonts_to_load("OpenSans", 48U, true, true); + auto* tab_bar_static_text2 = ui_system()->insert_child_element<StaticText>("tab_bar_text2", tab_bar, scene2, scene2_default_layer, vec2i{500, 300}, "tab bar text2"); + tab_bar_static_text2->request_fonts_to_load("OpenSans", 48U, true, true); + // Composite element + auto* tab_bar_elem1 = ui_system()->insert_child_element<UiElement>("tab_bar_elem1", tab_bar, scene2, scene2_default_layer, vec2i{600, 450}); + std::string button_text = "sub_element_text"; + auto* tab_bar_elem1_button = ui_system()->insert_child_element<Button>("tab_bar_elem1_button", tab_bar_elem1, scene2, scene2_default_layer, vec2i{100,50}, std::move(button_text)); + tab_bar_elem1_button->request_fonts_to_load("OpenSans", 48U, false, false); + // List box + auto* tab_bar_elem1_list_box = ui_system()->insert_child_element<ListBox>("tab_bar_elem1_list_box", tab_bar_elem1, scene2, scene2_default_layer, vec2i{100,300}, vec2i{100, 30}); + tab_bar_elem1_list_box->insert_item(scene2, scene2_default_layer, "text", 0.3f, "OpenSans", 48); + // Tabs + auto* tab1 = tab_bar->add_tab(".", scene2, scene2_default_layer, "OpenSans", 48u); + auto* tab2 = tab_bar->add_tab("..", scene2, scene2_default_layer, "OpenSans", 48u); + auto* tab3 = tab_bar->add_tab("...", scene2, scene2_default_layer, "OpenSans", 48u); + tab_bar->assign_content_to_tab(tab_bar_static_text1, tab1); + tab_bar->assign_content_to_tab(tab_bar_static_text2, tab2); + tab_bar->assign_content_to_tab(tab_bar_elem1, tab3); + + ui_system()->set_parent_frame(tab_bar, scene2_camera_bottom_left_frame); + + tab_bar_elem1_list_box->get_frame()->set_origin(vec3{ui_system()->get_size_in_meters(nullptr, vec2i{-100, 50}), 0.f}); + tab_bar_elem1_button->get_frame()->set_origin(vec3{ui_system()->get_size_in_meters(nullptr, vec2i{100, 50}), 0.f}); + tab_bar->get_frame()->set_origin(vec3{ui_system()->get_size_in_meters(nullptr, vec2i(osi::window()->size()) / 2), 0.0f}); + + ui_system()->insert_objects(tab_bar, scene2); + tab_bar->set_active_tab(tab1); +} + +void Presenter::init_scene3(Camera* camera) { + auto* scene3 = ui_system()->create_scene("scene3"); + auto* scene3_default_layer = ui_system()->get_default_scene_layer(scene3); + ui_system()->assign_camera_to_scene(scene3, camera); + auto* scene3_camera_bottom_left_frame = ui_system()->get_scene_frame(scene3); + + std::string text_static = "Test 123 \\c[128,0,0]i{Ja fajn} fiwasd \\c[0,128,0]b{dfsgndfugrefhewhfjkewjfdsjhjfhdsfjgkdffhjdsfjsdjfhdsjhfdsjhf} fawdsaf \\c[0,0,128]i{dwafsaf}dfwafsaffewfsdddddddddddddddddddddddddssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssassssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssasssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssasssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssasssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssasssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssasssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssasssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssasssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssasssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssasssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssassssssssssssssssssssssssssssss"; + auto* static_text = ui_system()->insert_element<StaticText>("static_text", scene3, scene3_default_layer, vec2i{600, 600}, text_static, true); + auto* static_text_scroll_bar = ui_system()->insert_child_element<Slider>("static_text_slider", static_text, scene3, scene3_default_layer, vec2i(20, 300), 1.0f, VERTICAL); + static_text_scroll_bar->get_transform()->set_anchor(Anchor{0.f, 1.0f, 0.0f, 0.0f}); + static_text->request_fonts_to_load("OpenSans", 48U, true, true); + + ui_system()->set_parent_frame(static_text, scene3_camera_bottom_left_frame); + + static_text_scroll_bar->get_frame()->set_origin(vec3{ui_system()->get_size_in_meters(nullptr, vec2i{200, 0}), 0.f}); + static_text->get_frame()->set_origin(vec3{ui_system()->get_size_in_meters(nullptr, {500.0f,400.0f}), 0.0f}); + + ui_system()->insert_objects(static_text, scene3); +} + +void Presenter::init_scene4(Camera* camera) +{ + auto* scene4 = ui_system()->create_scene("scene4"); + auto* scene4_camera_bottom_left_frame = ui_system()->get_scene_frame(scene4); + + ui_system()->assign_camera_to_scene(scene4, camera); + auto* scene4_default_layer = ui_system()->get_default_scene_layer(scene4); + + Button* button3 = ui_generators()->create_ui_button("ui_elem3", vec2i{100, 50}, scene4, scene4_default_layer, "button3"); + Button* button4 = ui_generators()->create_ui_button("ui_elem4", vec2i{100, 50}, scene4, scene4_default_layer, "button4"); + Button* button5 = ui_generators()->create_ui_button("ui_elem5", vec2i{100, 50}, scene4, scene4_default_layer, "button5"); + Button* button6 = ui_generators()->create_ui_button("ui_elem6", vec2i{100, 50}, scene4, scene4_default_layer, "button6"); + Button* button7 = ui_generators()->create_ui_button("ui_elem7", vec2i{100, 50}, scene4, scene4_default_layer, "button7"); + button3->get_transform()->set_anchor(Anchor{0.001f, 0.001f, 1.f, .8f}); + button4->get_transform()->set_anchor(Anchor{1.f, .8f, 0.001f, 0.001f}); + button5->get_transform()->set_anchor(Anchor{0.001f, .8f, 1.f, 0.001f}); + button6->get_transform()->set_anchor(Anchor{1.f, 0.001f, 0.001f, .8f}); + button7->get_transform()->set_anchor(Anchor{0.5f, 0.5f, 0.5f, 0.5f}); + button3->request_fonts_to_load("OpenSans", 48U, true, true); + button4->request_fonts_to_load("OpenSans", 48U, true, true); + button5->request_fonts_to_load("OpenSans", 48U, true, true); + button6->request_fonts_to_load("OpenSans", 48U, true, true); + button7->request_fonts_to_load("OpenSans", 48U, true, true); + + ui_system()->set_parent_frame(button3, scene4_camera_bottom_left_frame); + ui_system()->set_parent_frame(button4, scene4_camera_bottom_left_frame); + ui_system()->set_parent_frame(button5, scene4_camera_bottom_left_frame); + ui_system()->set_parent_frame(button6, scene4_camera_bottom_left_frame); + ui_system()->set_parent_frame(button7, scene4_camera_bottom_left_frame); + + + ui_system()->insert_objects(button3, scene4); + ui_system()->insert_objects(button4, scene4); + ui_system()->insert_objects(button5, scene4); + ui_system()->insert_objects(button6, scene4); + ui_system()->insert_objects(button7, scene4); + + print_tree(*ui_system()->uis(), std::cout); + print_tree(*object_system()->objects(), std::cout); + print_tree(*material_system()->materials(), std::cout); + + // const GLubyte* renderer = glGetString(GL_RENDERER); // Renderer string + // const GLubyte* vendor = glGetString(GL_VENDOR); // Vendor name + // const GLubyte* version = glGetString(GL_VERSION); // OpenGL version + // + // if (renderer && vendor && version) { + // std::cout << "GPU Renderer: " << renderer << std::endl; + // std::cout << "GPU Vendor: " << vendor << std::endl; + // std::cout << "OpenGL Version: " << version << std::endl; + // } else { + // std::cerr << "Unable to retrieve GPU information." << std::endl; + // } +} + void Presenter::release() { osi::presenters()->find<com::Folder>("maker")->erase(self_name() + ".link"); root()->erase("test_box"); root()->erase("test_box2"); + + // Erase element frames + root()->erase("container"); + root()->erase("checkbox"); root()->erase("ui_elem1"); root()->erase("ui_elem2"); + root()->erase("slider"); + root()->erase("handlers"); + root()->erase("directional_light"); } void Presenter::next_round() { - gfx::renderer()->clear_render_buffers(); - //gfx::renderer()->present_collection(gfx::object_system()->objects(), gfx::Renderer::pipeline::FORWARD); - gfx::renderer()->present_collection(gfx::object_system()->objects()->find<com::Folder>("grid"), gfx::Renderer::pipeline::FORWARD); - //gfx::renderer()->present_collection(gfx::object_system()->objects()->find<com::Folder>("maker"), gfx::Renderer::pipeline::FORWARD); + // Clear buffers + renderer()->clear_render_buffers(); + + // Present grid with default camera + camera_system()->activate_default_camera(); + camera_system()->set_frame(camera_system()->default_camera_folder(), camera_frame()); + renderer()->present_collection(object_system()->objects()->find<com::Folder>("grid"), Renderer::pipeline::FORWARD); - // if I change to ortho, the intersection with mouse stops working - gfx::camera_system()->active_camera()->set_perspective(false); + // Present ui scene + ui_system()->present_current_scene(); - gfx::renderer()->configure_depth_writing(false); - gfx::renderer()->configure_blending(true, GL_ONE, GL_ONE_MINUS_SRC_ALPHA); - gfx::renderer()->present_collection(gfx::object_system()->objects()->find<com::Folder>("ui"), gfx::Renderer::pipeline::FORWARD); - gfx::camera_system()->active_camera()->set_perspective(true); - gfx::renderer()->configure_depth_writing(true); + //gfx::renderer()->present_collection(gfx::object_system()->objects(), gfx::Renderer::pipeline::FORWARD); + //gfx::renderer()->present_collection(gfx::object_system()->objects()->find<com::Folder>("maker"), gfx::Renderer::pipeline::FORWARD); } }