Mercurial > hg > orthanc-stone
diff Framework/Viewport/SdlViewport.cpp @ 1045:6a9300ecfa13
tests for context loss are now restricted to WebAssembly
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 09 Oct 2019 17:17:56 +0200 |
parents | a7351ad54960 |
children | 32b403a47b19 |
line wrap: on
line diff
--- a/Framework/Viewport/SdlViewport.cpp Wed Oct 09 15:58:39 2019 +0200 +++ b/Framework/Viewport/SdlViewport.cpp Wed Oct 09 17:17:56 2019 +0200 @@ -47,107 +47,15 @@ compositor_.reset(new OpenGLCompositor(context_, GetScene())); } - - void* SdlOpenGLViewport::DebugGetInternalContext() const - { - return context_.DebugGetInternalContext(); - } - - bool SdlOpenGLViewport::IsContextLost() { - return context_.IsContextLost(); - } - - bool SdlOpenGLViewport::OpenGLContextLost() - { - throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); - } - - bool SdlOpenGLViewport::OpenGLContextRestored() - { - throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); - } - - void SdlOpenGLViewport::DisableCompositor() - { - compositor_.reset(NULL); - } - - void SdlOpenGLViewport::RestoreCompositor() - { - // the context must have been restored! - ORTHANC_ASSERT(!context_.IsContextLost()); - - if (compositor_.get() == NULL) - { - compositor_.reset(new OpenGLCompositor(context_, GetScene())); - } - else - { - std::string windowTitle(SDL_GetWindowTitle(GetWindow().GetObject())); - LOG(WARNING) << "RestoreCompositor() called for \"" << windowTitle << "\" while it was NOT lost! Nothing done."; - } - } - - // extern bool Debug_MustContextBeRestored(std::string title); - // extern void Debug_Context_ClearRestoreFlag(std::string title); - // extern void Debug_Context_ClearKillFlag(std::string title); - - bool Debug_SdlOpenGLViewport_Refresh_BP = false; - void SdlOpenGLViewport::Refresh() { - // <DEBUG CODE USED FOR CONTEXT LOSS RESTORING> - // try to restore the context if requested - // Debug_Context_ClearRestoreFlag - // Debug_SdlOpenGLViewport_Refresh_BP = true; - // try - // { - // if (Debug_MustContextBeRestored(GetCanvasIdentifier())) - // { - // // to prevent a bug where the context is both labelled as "to be lost" and "to be restored" - // // (occurs when one is hammering away at the keyboard like there's no tomorrow) - // Debug_Context_ClearKillFlag(GetCanvasIdentifier()); - // // this is called manually for loss/restore simulation - // context_.RestoreLostContext(); - // RestoreCompositor(); - // Debug_Context_ClearRestoreFlag(GetCanvasIdentifier()); - // } - // } - // catch (const OpenGLContextLostException& e) - // { - // LOG(ERROR) << "OpenGLContextLostException in SdlOpenGLViewport::Refresh() part 1"; - // } - // Debug_SdlOpenGLViewport_Refresh_BP = false; - // </DEBUG CODE USED FOR CONTEXT LOSS RESTORING> - - try + if (GetCompositor()) { - // the compositor COULD be dead! - if (GetCompositor()) - GetCompositor()->Refresh(); - } - catch (const OpenGLContextLostException& e) - { - // we need to wait for the "context restored" callback - LOG(WARNING) << "Context " << std::hex << e.context_ << " is lost! Compositor will be disabled."; - DisableCompositor(); - - // <DEBUG CODE USED FOR CONTEXT LOSS RESTORING> - // in case this was externally triggered... - //Debug_Context_ClearKillFlag(GetCanvasIdentifier()); - // </DEBUG CODE USED FOR CONTEXT LOSS RESTORING> - } - catch (...) - { - // something else nasty happened - throw; + GetCompositor()->Refresh(); } } - - - SdlCairoViewport::SdlCairoViewport(const char* title, unsigned int width, unsigned int height, @@ -159,16 +67,6 @@ UpdateSdlSurfaceSize(width, height); } - void SdlCairoViewport::DisableCompositor() - { - throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); - } - - void SdlCairoViewport::RestoreCompositor() - { - throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); - } - SdlCairoViewport::~SdlCairoViewport() { if (sdlSurface_)