#include #include #include #include #include #include #include #include #include #include #include #include #include #include struct Delegate { Delegate() {} void draw() { mgl::Rectangle rect(window->get_mouse_position().to_vec2f(), { 100.0f, 500.0f }); rect.set_color({255, 0, 0, 255}); window->draw(rect); shader_program->set_uniform("resolution", mgl::vec2f(texture->get_size().x, texture->get_size().y)); mgl::Sprite sprite(texture, { 100.0f - 10.0f, 0.0f }); sprite.set_color({255, 255, 255, 128}); window->draw(sprite, shader_program); mgl::Text text("hello world!\nelapsed time: " + std::to_string(clock.get_elapsed_time_seconds()), { 0.0f, 0.0f }, *font); window->draw(text); vertex_buffer->set_position({ (float)window->get_mouse_position().x + 100, (float)window->get_mouse_position().y }); window->draw(*vertex_buffer); } mgl::Window *window; mgl::Texture *texture; mgl::Font *font; mgl::VertexBuffer *vertex_buffer; mgl::Shader *shader_program; mgl::Clock clock; }; int main(int argc, char **argv) { mgl::Init init; mgl::Window::CreateParams window_create_params; window_create_params.size = { 1280, 720 }; mgl::Window window; if(!window.create("mglpp", window_create_params)) return 1; mgl::Texture texture; if(!texture.load_from_file("depends/mgl/tests/X11.jpg")) return 1; mgl::MemoryMappedFile font_file; if(!font_file.load("/usr/share/fonts/noto/NotoSans-Regular.ttf", mgl::MemoryMappedFile::LoadOptions{true, false})) return 1; mgl::Font font; if(!font.load_from_file(font_file, 32)) return 1; mgl::Shader shader; if(!shader.load_from_file("depends/mgl/tests/circle_mask.glsl", mgl::Shader::Fragment)) return 1; mgl::Texture font_texture = font.get_texture(); mgl::Vertex vertices[4] = { { {0.0f, 0.0f}, {0.0f, 0.0f}, {255, 0, 0, 100} }, { {font_texture.get_size().x, 0.0f}, {1.0f, 0.0f}, {0, 255, 0, 100} }, { {font_texture.get_size().x, font_texture.get_size().y}, {1.0f, 1.0f}, {0, 0, 255, 100} }, { {0.0f, font_texture.get_size().y}, {0.0f, 1.0f}, {255, 0, 255, 100}, } }; mgl::VertexBuffer vertex_buffer; if(!vertex_buffer.update(vertices, 4, mgl::PrimitiveType::Quads, mgl::VertexBuffer::Static)) return 1; vertex_buffer.set_texture(&font_texture); Delegate delegate; delegate.window = &window; delegate.texture = &texture; delegate.font = &font; delegate.vertex_buffer = &vertex_buffer; delegate.shader_program = &shader; mgl::Event event; while(window.is_open()) { if(window.poll_event(event)) { } window.clear(mgl::Color(0, 0, 0, 255)); delegate.draw(); window.display(); } return 0; }