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_;
+  }  
 }