Mercurial > hg > orthanc-stone
diff Applications/Sdl/SdlEngine.cpp @ 53:c2dc924f1a63 wasm
removing threading out of the framework
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Thu, 27 Apr 2017 16:57:49 +0200 |
parents | b340879da9bd |
children | 9e3c2e75b870 |
line wrap: on
line diff
--- a/Applications/Sdl/SdlEngine.cpp Thu Apr 27 14:50:40 2017 +0200 +++ b/Applications/Sdl/SdlEngine.cpp Thu Apr 27 16:57:49 2017 +0200 @@ -38,7 +38,14 @@ viewportChanged_ = false; - if (buffering_.RenderOffscreen(viewport_)) + bool updated; + + { + BasicApplicationContext::ViewportLocker locker(context_); + updated = buffering_.RenderOffscreen(locker.GetViewport()); + } + + if (updated) { // Do not notify twice when a new frame was rendered, to avoid // spoiling the SDL event queue @@ -119,10 +126,11 @@ } - void SdlEngine::SetSize(unsigned int width, + void SdlEngine::SetSize(BasicApplicationContext::ViewportLocker& locker, + unsigned int width, unsigned int height) { - buffering_.SetSize(width, height, viewport_); + buffering_.SetSize(width, height, locker.GetViewport()); viewportChanged_ = true; Refresh(); } @@ -146,16 +154,18 @@ SdlEngine::SdlEngine(SdlWindow& window, - IViewport& viewport) : + BasicApplicationContext& context) : window_(window), - viewport_(viewport), + context_(context), continue_(true) { refreshEvent_ = SDL_RegisterEvents(1); - SetSize(window_.GetWidth(), window_.GetHeight()); - - viewport_.Register(*this); + { + BasicApplicationContext::ViewportLocker locker(context_); + SetSize(locker, window_.GetWidth(), window_.GetHeight()); + locker.GetViewport().Register(*this); + } renderThread_ = boost::thread(RenderThread, this); } @@ -165,7 +175,10 @@ { Stop(); - viewport_.Unregister(*this); + { + BasicApplicationContext::ViewportLocker locker(context_); + locker.GetViewport().Unregister(*this); + } } @@ -183,6 +196,8 @@ while (SDL_PollEvent(&event)) { + BasicApplicationContext::ViewportLocker locker(context_); + if (event.type == SDL_QUIT) { stop = true; @@ -199,15 +214,15 @@ switch (event.button.button) { case SDL_BUTTON_LEFT: - viewport_.MouseDown(MouseButton_Left, event.button.x, event.button.y, modifiers); + locker.GetViewport().MouseDown(MouseButton_Left, event.button.x, event.button.y, modifiers); break; case SDL_BUTTON_RIGHT: - viewport_.MouseDown(MouseButton_Right, event.button.x, event.button.y, modifiers); + locker.GetViewport().MouseDown(MouseButton_Right, event.button.x, event.button.y, modifiers); break; case SDL_BUTTON_MIDDLE: - viewport_.MouseDown(MouseButton_Middle, event.button.x, event.button.y, modifiers); + locker.GetViewport().MouseDown(MouseButton_Middle, event.button.x, event.button.y, modifiers); break; default: @@ -216,26 +231,26 @@ } else if (event.type == SDL_MOUSEMOTION) { - viewport_.MouseMove(event.button.x, event.button.y); + locker.GetViewport().MouseMove(event.button.x, event.button.y); } else if (event.type == SDL_MOUSEBUTTONUP) { - viewport_.MouseUp(); + locker.GetViewport().MouseUp(); } else if (event.type == SDL_WINDOWEVENT) { switch (event.window.event) { case SDL_WINDOWEVENT_LEAVE: - viewport_.MouseLeave(); + locker.GetViewport().MouseLeave(); break; case SDL_WINDOWEVENT_ENTER: - viewport_.MouseEnter(); + locker.GetViewport().MouseEnter(); break; case SDL_WINDOWEVENT_SIZE_CHANGED: - SetSize(event.window.data1, event.window.data2); + SetSize(locker, event.window.data1, event.window.data2); break; default: @@ -251,11 +266,11 @@ if (event.wheel.y > 0) { - viewport_.MouseWheel(MouseWheelDirection_Up, x, y, modifiers); + locker.GetViewport().MouseWheel(MouseWheelDirection_Up, x, y, modifiers); } else if (event.wheel.y < 0) { - viewport_.MouseWheel(MouseWheelDirection_Down, x, y, modifiers); + locker.GetViewport().MouseWheel(MouseWheelDirection_Down, x, y, modifiers); } } else if (event.type == SDL_KEYDOWN) @@ -264,32 +279,32 @@ switch (event.key.keysym.sym) { - case SDLK_a: viewport_.KeyPressed('a', modifiers); break; - case SDLK_b: viewport_.KeyPressed('b', modifiers); break; - case SDLK_c: viewport_.KeyPressed('c', modifiers); break; - case SDLK_d: viewport_.KeyPressed('d', modifiers); break; - case SDLK_e: viewport_.KeyPressed('e', modifiers); break; - case SDLK_f: window_.ToggleMaximize(); break; - case SDLK_g: viewport_.KeyPressed('g', modifiers); break; - case SDLK_h: viewport_.KeyPressed('h', modifiers); break; - case SDLK_i: viewport_.KeyPressed('i', modifiers); break; - case SDLK_j: viewport_.KeyPressed('j', modifiers); break; - case SDLK_k: viewport_.KeyPressed('k', modifiers); break; - case SDLK_l: viewport_.KeyPressed('l', modifiers); break; - case SDLK_m: viewport_.KeyPressed('m', modifiers); break; - case SDLK_n: viewport_.KeyPressed('n', modifiers); break; - case SDLK_o: viewport_.KeyPressed('o', modifiers); break; - case SDLK_p: viewport_.KeyPressed('p', modifiers); break; - case SDLK_q: stop = true; break; - case SDLK_r: viewport_.KeyPressed('r', modifiers); break; - case SDLK_s: viewport_.KeyPressed('s', modifiers); break; - case SDLK_t: viewport_.KeyPressed('t', modifiers); break; - case SDLK_u: viewport_.KeyPressed('u', modifiers); break; - case SDLK_v: viewport_.KeyPressed('v', modifiers); break; - case SDLK_w: viewport_.KeyPressed('w', modifiers); break; - case SDLK_x: viewport_.KeyPressed('x', modifiers); break; - case SDLK_y: viewport_.KeyPressed('y', modifiers); break; - case SDLK_z: viewport_.KeyPressed('z', modifiers); break; + case SDLK_a: locker.GetViewport().KeyPressed('a', modifiers); break; + case SDLK_b: locker.GetViewport().KeyPressed('b', modifiers); break; + case SDLK_c: locker.GetViewport().KeyPressed('c', modifiers); break; + case SDLK_d: locker.GetViewport().KeyPressed('d', modifiers); break; + case SDLK_e: locker.GetViewport().KeyPressed('e', modifiers); break; + case SDLK_f: window_.ToggleMaximize(); break; + case SDLK_g: locker.GetViewport().KeyPressed('g', modifiers); break; + case SDLK_h: locker.GetViewport().KeyPressed('h', modifiers); break; + case SDLK_i: locker.GetViewport().KeyPressed('i', modifiers); break; + case SDLK_j: locker.GetViewport().KeyPressed('j', modifiers); break; + case SDLK_k: locker.GetViewport().KeyPressed('k', modifiers); break; + case SDLK_l: locker.GetViewport().KeyPressed('l', modifiers); break; + case SDLK_m: locker.GetViewport().KeyPressed('m', modifiers); break; + case SDLK_n: locker.GetViewport().KeyPressed('n', modifiers); break; + case SDLK_o: locker.GetViewport().KeyPressed('o', modifiers); break; + case SDLK_p: locker.GetViewport().KeyPressed('p', modifiers); break; + case SDLK_q: stop = true; break; + case SDLK_r: locker.GetViewport().KeyPressed('r', modifiers); break; + case SDLK_s: locker.GetViewport().KeyPressed('s', modifiers); break; + case SDLK_t: locker.GetViewport().KeyPressed('t', modifiers); break; + case SDLK_u: locker.GetViewport().KeyPressed('u', modifiers); break; + case SDLK_v: locker.GetViewport().KeyPressed('v', modifiers); break; + case SDLK_w: locker.GetViewport().KeyPressed('w', modifiers); break; + case SDLK_x: locker.GetViewport().KeyPressed('x', modifiers); break; + case SDLK_y: locker.GetViewport().KeyPressed('y', modifiers); break; + case SDLK_z: locker.GetViewport().KeyPressed('z', modifiers); break; default: break;