Mercurial > hg > orthanc-stone
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 } |