--- /dev/null
+#ifndef MSP_GAMEVIEW_APPLICATION_H_
+#define MSP_GAMEVIEW_APPLICATION_H_
+
+#include <msp/core/application.h>
+#include <msp/game/director.h>
+#include <msp/gl/device.h>
+#include <msp/gl/windowview.h>
+#include <msp/graphics/display.h>
+#include <msp/graphics/window.h>
+#include "presenter.h"
+
+namespace Msp::GameView {
+
+template<typename T, typename R>
+class Application: public Msp::RegisteredApplication<T>
+{
+public:
+ using ResourcesType = R;
+
+protected:
+ Msp::Graphics::Display display;
+ Msp::Graphics::Window window;
+ GL::Device gl_device;
+ ResourcesType resources;
+ Msp::Game::Director director;
+ GL::WindowView gl_view;
+ Presenter presenter;
+
+public:
+ Application();
+
+ int main() override;
+protected:
+ void tick() override;
+};
+
+template<typename T, typename R>
+Application<T, R>::Application():
+ window(display, 1920, 1080),
+ gl_device(window),
+ director(resources),
+ gl_view(window),
+ presenter(director, gl_view)
+{
+ window.signal_close.connect(sigc::bind(sigc::mem_fun(this, &Application::exit), 0));
+}
+
+template<typename T, typename R>
+int Application<T, R>::main()
+{
+ window.show();
+ return Msp::Application::main();
+}
+
+template<typename T, typename R>
+void Application<T, R>::tick()
+{
+ display.tick();
+ director.tick();
+}
+
+} // namespace Msp::GameView
+
+#endif