MCPcopy Create free account
hub / github.com/MeshInspector/MeshLib / captureSceneScreenShot

Method captureSceneScreenShot

source/MRViewer/MRViewer.cpp:2519–2611  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2517}
2518
2519Image Viewer::captureSceneScreenShot( const Vector2i& resolution, bool transparentBg /*= false*/ )
2520{
2521 if ( !glInitialized_ )
2522 return {};
2523
2524 Vector2i newRes;
2525 newRes.x = resolution.x <= 0 ? framebufferSize.x : resolution.x;
2526 newRes.y = resolution.y <= 0 ? framebufferSize.y : resolution.y;
2527
2528 // store old sizes
2529 auto vpBounbds = getViewportsBounds();
2530 std::vector<ViewportRectangle> rects;
2531 std::vector<Viewport::Parameters> viewportParams;
2532 for ( auto& viewport : viewport_list )
2533 {
2534 auto rect = viewport.getViewportRect();
2535 rects.push_back( rect );
2536 rect.min.x = float( rect.min.x - vpBounbds.min.x ) / width( vpBounbds ) * newRes.x;
2537 rect.min.y = float( rect.min.y - vpBounbds.min.y ) / height( vpBounbds ) * newRes.y;
2538 rect.max.x = float( rect.max.x - vpBounbds.min.x ) / width( vpBounbds ) * newRes.x;
2539 rect.max.y = float( rect.max.y - vpBounbds.min.y ) / height( vpBounbds ) * newRes.y;
2540 viewport.setViewportRect( rect );
2541 }
2542 if ( transparentBg )
2543 {
2544 for ( int i = 0; i < viewport_list.size(); ++i )
2545 {
2546 auto& viewport = viewport_list[i];
2547 viewportParams.resize( viewport_list.size() );
2548 auto viewportParamsNew = viewport.getParameters();
2549 viewportParams[i] = viewportParamsNew;
2550 viewportParamsNew.backgroundColor = Color::transparent();
2551 viewportParamsNew.borderColor = Color::transparent();
2552 viewport.setParameters( viewportParamsNew );
2553 }
2554 }
2555 if ( newRes != framebufferSize )
2556 {
2557 if ( alphaSorter_ )
2558 alphaSorter_->updateTransparencyTexturesSize( newRes.x, newRes.y );
2559 if ( depthPeeler_ )
2560 depthPeeler_->reset( newRes );
2561 }
2562
2563 std::vector<Color> pixels( newRes.x * newRes.y );
2564
2565 FramebufferData fd;
2566 fd.gen( newRes, bool( depthPeeler_ ), -1 );
2567 fd.bind();
2568
2569 setupScene();
2570 clearFramebuffers();
2571 drawScene( &fd );
2572
2573 fd.copyTextureBindDef();
2574 fd.bindTexture( true, false ); // only bind color
2575
2576#ifdef __EMSCRIPTEN__

Callers 4

drawDialogMethod · 0.80
actionMethod · 0.80
pythonCaptureScreenShotFunction · 0.80

Calls 15

widthFunction · 0.85
heightFunction · 0.85
push_backMethod · 0.80
setViewportRectMethod · 0.80
copyTextureBindDefMethod · 0.80
bindTextureMethod · 0.80
sizeMethod · 0.45
resizeMethod · 0.45
setParametersMethod · 0.45
resetMethod · 0.45
genMethod · 0.45

Tested by

no test coverage detected