#include #include #include #include #include #include #include #include #include #include #include #include #include struct Delegate { Delegate() {} void draw() { mgl::Rectangle rect(window->get_cursor_position().to_vec2f(), { 100.0f, 500.0f }); rect.set_color({255, 0, 0, 255}); window->draw(rect); shader_program->set_uniform("resolution", mgl::vec2f(window->get_size().x, window->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({ window->get_cursor_position().x + 100, window->get_cursor_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 window; if(!window.create("mglpp", 1920, 1080)) return 1; mgl::Texture texture; if(!texture.load_from_file("depends/mgl/tests/X11.png")) return 1; mgl::Font font; if(!font.load_from_file("/usr/share/fonts/noto/NotoSans-Regular.ttf", 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(true) { if(window.poll_event(event)) { } window.clear(mgl::Color(0, 0, 0, 255)); delegate.draw(); window.display(); } return 0; }