comparison 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
comparison
equal deleted inserted replaced
1551:c54bc5bffd01 1552:a4d82f1bcb10
1520 } 1520 }
1521 1521
1522 ViewerViewport(OrthancStone::ILoadersContext& context, 1522 ViewerViewport(OrthancStone::ILoadersContext& context,
1523 const OrthancStone::DicomSource& source, 1523 const OrthancStone::DicomSource& source,
1524 const std::string& canvas, 1524 const std::string& canvas,
1525 boost::shared_ptr<FramesCache> cache) : 1525 boost::shared_ptr<FramesCache> cache,
1526 bool softwareRendering) :
1526 context_(context), 1527 context_(context),
1527 source_(source), 1528 source_(source),
1528 viewport_(OrthancStone::WebGLViewport::Create(canvas)),
1529 //viewport_(OrthancStone::WebAssemblyCairoViewport::Create(canvas)),
1530 cache_(cache), 1529 cache_(cache),
1531 fitNextContent_(true), 1530 fitNextContent_(true),
1532 isCtrlDown_(false) 1531 isCtrlDown_(false)
1533 { 1532 {
1534 if (!cache_) 1533 if (!cache_)
1535 { 1534 {
1536 throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer); 1535 throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer);
1536 }
1537
1538 if (softwareRendering)
1539 {
1540 LOG(INFO) << "Creating Cairo viewport in canvas: " << canvas;
1541 viewport_ = OrthancStone::WebAssemblyCairoViewport::Create(canvas);
1542 }
1543 else
1544 {
1545 LOG(INFO) << "Creating WebGL viewport in canvas: " << canvas;
1546 viewport_ = OrthancStone::WebGLViewport::Create(canvas);
1537 } 1547 }
1538 1548
1539 emscripten_set_wheel_callback(viewport_->GetCanvasCssSelector().c_str(), this, true, OnWheel); 1549 emscripten_set_wheel_callback(viewport_->GetCanvasCssSelector().c_str(), this, true, OnWheel);
1540 emscripten_set_keydown_callback(EMSCRIPTEN_EVENT_TARGET_WINDOW, this, false, OnKey); 1550 emscripten_set_keydown_callback(EMSCRIPTEN_EVENT_TARGET_WINDOW, this, false, OnKey);
1541 emscripten_set_keyup_callback(EMSCRIPTEN_EVENT_TARGET_WINDOW, this, false, OnKey); 1551 emscripten_set_keyup_callback(EMSCRIPTEN_EVENT_TARGET_WINDOW, this, false, OnKey);
1596 1606
1597 public: 1607 public:
1598 static boost::shared_ptr<ViewerViewport> Create(OrthancStone::ILoadersContext::ILock& lock, 1608 static boost::shared_ptr<ViewerViewport> Create(OrthancStone::ILoadersContext::ILock& lock,
1599 const OrthancStone::DicomSource& source, 1609 const OrthancStone::DicomSource& source,
1600 const std::string& canvas, 1610 const std::string& canvas,
1601 boost::shared_ptr<FramesCache> cache) 1611 boost::shared_ptr<FramesCache> cache,
1612 bool softwareRendering)
1602 { 1613 {
1603 boost::shared_ptr<ViewerViewport> viewport( 1614 boost::shared_ptr<ViewerViewport> viewport(
1604 new ViewerViewport(lock.GetContext(), source, canvas, cache)); 1615 new ViewerViewport(lock.GetContext(), source, canvas, cache, softwareRendering));
1605 1616
1606 viewport->loader_ = OrthancStone::DicomResourcesLoader::Create(lock); 1617 viewport->loader_ = OrthancStone::DicomResourcesLoader::Create(lock);
1607 viewport->Register<OrthancStone::DicomResourcesLoader::SuccessMessage>( 1618 viewport->Register<OrthancStone::DicomResourcesLoader::SuccessMessage>(
1608 *viewport->loader_, &ViewerViewport::Handle); 1619 *viewport->loader_, &ViewerViewport::Handle);
1609 1620
1908 1919
1909 static OrthancStone::DicomSource source_; 1920 static OrthancStone::DicomSource source_;
1910 static boost::shared_ptr<FramesCache> cache_; 1921 static boost::shared_ptr<FramesCache> cache_;
1911 static boost::shared_ptr<OrthancStone::WebAssemblyLoadersContext> context_; 1922 static boost::shared_ptr<OrthancStone::WebAssemblyLoadersContext> context_;
1912 static std::string stringBuffer_; 1923 static std::string stringBuffer_;
1924 static bool softwareRendering_ = false;
1913 1925
1914 1926
1915 1927
1916 static void FormatTags(std::string& target, 1928 static void FormatTags(std::string& target,
1917 const Orthanc::DicomMap& tags) 1929 const Orthanc::DicomMap& tags)
1952 { 1964 {
1953 Viewports::iterator found = allViewports_.find(canvas); 1965 Viewports::iterator found = allViewports_.find(canvas);
1954 if (found == allViewports_.end()) 1966 if (found == allViewports_.end())
1955 { 1967 {
1956 std::unique_ptr<OrthancStone::ILoadersContext::ILock> lock(context_->Lock()); 1968 std::unique_ptr<OrthancStone::ILoadersContext::ILock> lock(context_->Lock());
1957 boost::shared_ptr<ViewerViewport> viewport(ViewerViewport::Create(*lock, source_, canvas, cache_)); 1969 boost::shared_ptr<ViewerViewport> viewport(
1970 ViewerViewport::Create(*lock, source_, canvas, cache_, softwareRendering_));
1958 viewport->AcquireObserver(new WebAssemblyObserver); 1971 viewport->AcquireObserver(new WebAssemblyObserver);
1959 allViewports_[canvas] = viewport; 1972 allViewports_[canvas] = viewport;
1960 return viewport; 1973 return viewport;
1961 } 1974 }
1962 else 1975 else
2267 { 2280 {
2268 GetViewport(canvas)->Invert(); 2281 GetViewport(canvas)->Invert();
2269 } 2282 }
2270 EXTERN_CATCH_EXCEPTIONS; 2283 EXTERN_CATCH_EXCEPTIONS;
2271 } 2284 }
2285
2286
2287 EMSCRIPTEN_KEEPALIVE
2288 void SetSoftwareRendering(int softwareRendering)
2289 {
2290 softwareRendering_ = softwareRendering;
2291 }
2292
2293
2294 EMSCRIPTEN_KEEPALIVE
2295 int IsSoftwareRendering()
2296 {
2297 return softwareRendering_;
2298 }
2272 } 2299 }