Mercurial > hg > orthanc-stone
diff Applications/StoneWebViewer/WebAssembly/StoneWebViewer.cpp @ 1552:a4d82f1bcb10
user preferences: not for diagnostic use, software rendering
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Fri, 14 Aug 2020 15:35:01 +0200 |
parents | c54bc5bffd01 |
children | 6d14ed6163b1 |
line wrap: on
line diff
--- a/Applications/StoneWebViewer/WebAssembly/StoneWebViewer.cpp Thu Aug 13 22:05:13 2020 +0200 +++ b/Applications/StoneWebViewer/WebAssembly/StoneWebViewer.cpp Fri Aug 14 15:35:01 2020 +0200 @@ -1522,11 +1522,10 @@ ViewerViewport(OrthancStone::ILoadersContext& context, const OrthancStone::DicomSource& source, const std::string& canvas, - boost::shared_ptr<FramesCache> cache) : + boost::shared_ptr<FramesCache> cache, + bool softwareRendering) : context_(context), source_(source), - viewport_(OrthancStone::WebGLViewport::Create(canvas)), - //viewport_(OrthancStone::WebAssemblyCairoViewport::Create(canvas)), cache_(cache), fitNextContent_(true), isCtrlDown_(false) @@ -1535,6 +1534,17 @@ { throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer); } + + if (softwareRendering) + { + LOG(INFO) << "Creating Cairo viewport in canvas: " << canvas; + viewport_ = OrthancStone::WebAssemblyCairoViewport::Create(canvas); + } + else + { + LOG(INFO) << "Creating WebGL viewport in canvas: " << canvas; + viewport_ = OrthancStone::WebGLViewport::Create(canvas); + } emscripten_set_wheel_callback(viewport_->GetCanvasCssSelector().c_str(), this, true, OnWheel); emscripten_set_keydown_callback(EMSCRIPTEN_EVENT_TARGET_WINDOW, this, false, OnKey); @@ -1598,10 +1608,11 @@ static boost::shared_ptr<ViewerViewport> Create(OrthancStone::ILoadersContext::ILock& lock, const OrthancStone::DicomSource& source, const std::string& canvas, - boost::shared_ptr<FramesCache> cache) + boost::shared_ptr<FramesCache> cache, + bool softwareRendering) { boost::shared_ptr<ViewerViewport> viewport( - new ViewerViewport(lock.GetContext(), source, canvas, cache)); + new ViewerViewport(lock.GetContext(), source, canvas, cache, softwareRendering)); viewport->loader_ = OrthancStone::DicomResourcesLoader::Create(lock); viewport->Register<OrthancStone::DicomResourcesLoader::SuccessMessage>( @@ -1910,6 +1921,7 @@ static boost::shared_ptr<FramesCache> cache_; static boost::shared_ptr<OrthancStone::WebAssemblyLoadersContext> context_; static std::string stringBuffer_; +static bool softwareRendering_ = false; @@ -1954,7 +1966,8 @@ if (found == allViewports_.end()) { std::unique_ptr<OrthancStone::ILoadersContext::ILock> lock(context_->Lock()); - boost::shared_ptr<ViewerViewport> viewport(ViewerViewport::Create(*lock, source_, canvas, cache_)); + boost::shared_ptr<ViewerViewport> viewport( + ViewerViewport::Create(*lock, source_, canvas, cache_, softwareRendering_)); viewport->AcquireObserver(new WebAssemblyObserver); allViewports_[canvas] = viewport; return viewport; @@ -2269,4 +2282,18 @@ } EXTERN_CATCH_EXCEPTIONS; } + + + EMSCRIPTEN_KEEPALIVE + void SetSoftwareRendering(int softwareRendering) + { + softwareRendering_ = softwareRendering; + } + + + EMSCRIPTEN_KEEPALIVE + int IsSoftwareRendering() + { + return softwareRendering_; + } }