If resolution is set to (0,0) then a fullscreen app is created.legacy
| @@ -41,7 +41,7 @@ public: | |||
| virtual ~null_display() {} | |||
| protected: | |||
| void SetResolution(ivec2) {} | |||
| void set_resolution(ivec2) {} | |||
| void SetPosition(ivec2) {} | |||
| void Enable() {} | |||
| @@ -63,28 +63,11 @@ class ApplicationDisplayData | |||
| { | |||
| friend class ApplicationDisplay; | |||
| ApplicationDisplayData(char const *name, ivec2 resolution) | |||
| : display(name, resolution) | |||
| ApplicationDisplayData(char const *name, ivec2 res) | |||
| : display(name, res) | |||
| { } | |||
| protected: | |||
| void SetResolution(ivec2 resolution) | |||
| { | |||
| display.SetResolution(resolution); | |||
| } | |||
| void SetPosition(ivec2 position) | |||
| { | |||
| display.SetPosition(position); | |||
| } | |||
| void Enable() | |||
| { | |||
| display.Enable(); | |||
| } | |||
| void Disable() | |||
| { | |||
| display.Disable(); | |||
| } | |||
| #if __native_client__ | |||
| //NOT HANDLED YET | |||
| #elif __ANDROID__ | |||
| @@ -99,9 +82,9 @@ protected: | |||
| #endif | |||
| }; | |||
| ApplicationDisplay::ApplicationDisplay(char const *name, ivec2 resolution) | |||
| ApplicationDisplay::ApplicationDisplay(char const *name, ivec2 res) | |||
| { | |||
| data = new ApplicationDisplayData(name, resolution); | |||
| data = new ApplicationDisplayData(name, res); | |||
| } | |||
| ApplicationDisplay::~ApplicationDisplay() | |||
| @@ -109,29 +92,35 @@ ApplicationDisplay::~ApplicationDisplay() | |||
| delete data; | |||
| } | |||
| void ApplicationDisplay::SetResolution(ivec2 resolution) | |||
| ivec2 ApplicationDisplay::resolution() const | |||
| { | |||
| super::SetResolution(resolution); | |||
| return data->display.resolution(); | |||
| } | |||
| data->SetResolution(resolution); | |||
| void ApplicationDisplay::set_resolution(ivec2 res) | |||
| { | |||
| super::set_resolution(res); | |||
| data->display.set_resolution(res); | |||
| } | |||
| void ApplicationDisplay::SetPosition(ivec2 position) | |||
| { | |||
| super::SetPosition(position); | |||
| data->SetPosition(position); | |||
| data->display.SetPosition(position); | |||
| } | |||
| void ApplicationDisplay::Enable() | |||
| { | |||
| super::Enable(); | |||
| data->Enable(); | |||
| data->display.Enable(); | |||
| } | |||
| void ApplicationDisplay::Disable() | |||
| { | |||
| data->Disable(); | |||
| data->display.Disable(); | |||
| super::Disable(); | |||
| } | |||
| @@ -141,8 +130,8 @@ class ApplicationData | |||
| { | |||
| friend class Application; | |||
| ApplicationData(char const *name, ivec2 resolution, float framerate) | |||
| : app(name, resolution, framerate) | |||
| ApplicationData(char const *name, ivec2 res, float framerate) | |||
| : app(name, res, framerate) | |||
| { } | |||
| #if __native_client__ | |||
| @@ -172,10 +161,11 @@ static void AppCallback() | |||
| * Public Application class | |||
| */ | |||
| Application::Application(char const *name, ivec2 resolution, float framerate) | |||
| Application::Application(char const *name, ivec2 res, float framerate) | |||
| { | |||
| SceneDisplay::Add(new ApplicationDisplay(name, resolution)); | |||
| data = new ApplicationData(name, resolution, framerate); | |||
| auto app_display = new ApplicationDisplay(name, res); | |||
| SceneDisplay::Add(app_display); | |||
| data = new ApplicationData(name, app_display->resolution(), framerate); | |||
| } | |||
| bool Application::MustTick() | |||
| @@ -31,7 +31,9 @@ public: | |||
| virtual ~ApplicationDisplay(); | |||
| /* pos/size/... methods */ | |||
| virtual void SetResolution(ivec2 resolution); | |||
| virtual void set_resolution(ivec2 resolution); | |||
| virtual ivec2 resolution() const; | |||
| virtual void SetPosition(ivec2 position); | |||
| protected: | |||
| @@ -54,7 +54,6 @@ SdlAppDisplay::SdlAppDisplay(char const *title, ivec2 res) | |||
| { | |||
| #if LOL_USE_SDL | |||
| ivec2 window_size = res; | |||
| ivec2 screen_size = res; | |||
| /* Initialise SDL */ | |||
| if (!SDL_WasInit(0)) | |||
| @@ -66,15 +65,16 @@ SdlAppDisplay::SdlAppDisplay(char const *title, ivec2 res) | |||
| } | |||
| } | |||
| #if LOL_USE_SDL | |||
| /* This seems to fix the swap context bug. | |||
| * However, perfs warning have been may occur. */ | |||
| SDL_GL_SetAttribute(SDL_GL_SHARE_WITH_CURRENT_CONTEXT, 1); | |||
| data->m_window = SDL_CreateWindow(title, SDL_WINDOWPOS_UNDEFINED, | |||
| SDL_WINDOWPOS_UNDEFINED, | |||
| window_size.x, window_size.y, | |||
| SDL_WINDOW_OPENGL); | |||
| int flags = SDL_WINDOW_OPENGL; | |||
| if (window_size == ivec2(0)) | |||
| flags |= SDL_WINDOW_FULLSCREEN_DESKTOP; | |||
| data->m_window = SDL_CreateWindow(title, | |||
| SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, | |||
| window_size.x, window_size.y, flags); | |||
| if (!data->m_window) | |||
| { | |||
| msg::error("cannot create rendering window: %s\n", SDL_GetError()); | |||
| @@ -84,7 +84,6 @@ SdlAppDisplay::SdlAppDisplay(char const *title, ivec2 res) | |||
| SDL_GetWindowSize(data->m_window, &res.x, &res.y); | |||
| data->m_glcontext = SDL_GL_CreateContext(data->m_window); | |||
| #endif | |||
| /* Initialise everything */ | |||
| Video::Setup(res); //TODO ?? Should it be here ? | |||
| @@ -104,12 +103,22 @@ SdlAppDisplay::~SdlAppDisplay() | |||
| delete data; | |||
| } | |||
| void SdlAppDisplay::SetResolution(ivec2 resolution) | |||
| ivec2 SdlAppDisplay::resolution() const | |||
| { | |||
| ivec2 ret(0); | |||
| #if LOL_USE_SDL | |||
| SDL_GetWindowSize(data->m_window, &ret.x, &ret.y); | |||
| #endif | |||
| return ret; | |||
| } | |||
| void SdlAppDisplay::set_resolution(ivec2 resolution) | |||
| { | |||
| #if LOL_USE_SDL | |||
| SDL_SetWindowSize(data->m_window, resolution.x, resolution.y); | |||
| #endif | |||
| } | |||
| void SdlAppDisplay::SetPosition(ivec2 position) | |||
| { | |||
| #if LOL_USE_SDL | |||
| @@ -25,13 +25,16 @@ class SdlAppDisplayData; | |||
| class SdlAppDisplay | |||
| { | |||
| friend class ApplicationDisplayData; | |||
| friend class ApplicationDisplay; | |||
| public: | |||
| SdlAppDisplay(char const *title, ivec2 resolution); | |||
| virtual ~SdlAppDisplay(); | |||
| protected: | |||
| void SetResolution(ivec2 resolution); | |||
| virtual void set_resolution(ivec2 resolution); | |||
| virtual ivec2 resolution() const; | |||
| void SetPosition(ivec2 position); | |||
| void Enable(); | |||
| @@ -68,7 +68,9 @@ public: | |||
| virtual ~SceneDisplay() { } | |||
| /* pos/size/... methods */ | |||
| virtual void SetResolution(ivec2 resolution) { UNUSED(resolution); } | |||
| virtual void set_resolution(ivec2 resolution) { UNUSED(resolution); } | |||
| virtual ivec2 resolution() const { return ivec2(0); } | |||
| virtual void SetPosition(ivec2 position) { UNUSED(position); } | |||
| /* TODO: Should that be there or in Video ? */ | |||