MCPcopy Create free account
hub / github.com/MrKepzie/Natron / renderHandler

Method renderHandler

Engine/EffectInstance.cpp:2379–2899  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2377} // EffectInstance::tiledRenderingFunctor
2378
2379EffectInstance::RenderingFunctorRetEnum
2380EffectInstance::Implementation::renderHandler(const EffectDataTLSPtr& tls,
2381 const unsigned int mipMapLevel,
2382 const bool renderFullScaleThenDownscale,
2383 const bool isSequentialRender,
2384 const bool isRenderResponseToUserInteraction,
2385 const RectI & renderMappedRectToRender,
2386 const RectI & downscaledRectToRender,
2387 const bool byPassCache,
2388 const ImageBitDepthEnum outputClipPrefDepth,
2389 const ImagePlaneDesc & outputClipPrefsComps,
2390 const std::bitset<4>& processChannels,
2391 const boost::shared_ptr<Image> & originalInputImage,
2392 const boost::shared_ptr<Image> & maskImage,
2393 const ImagePremultiplicationEnum originalImagePremultiplication,
2394 ImagePlanesToRender & planes)
2395{
2396 boost::shared_ptr<TimeLapse> timeRecorder;
2397 const boost::shared_ptr<ParallelRenderArgs>& frameArgs = tls->frameArgs.back();
2398
2399 if (frameArgs->stats) {
2400 timeRecorder.reset( new TimeLapse() );
2401 }
2402
2403 const EffectInstance::PlaneToRender & firstPlane = planes.planes.begin()->second;
2404 const double time = tls->currentRenderArgs.time;
2405 const ViewIdx view = tls->currentRenderArgs.view;
2406
2407 // at this point, it may be unnecessary to call render because it was done a long time ago => check the bitmap here!
2408# ifndef NDEBUG
2409 RectI renderBounds = firstPlane.renderMappedImage->getBounds();
2410 assert(renderBounds.x1 <= renderMappedRectToRender.x1 && renderMappedRectToRender.x2 <= renderBounds.x2 &&
2411 renderBounds.y1 <= renderMappedRectToRender.y1 && renderMappedRectToRender.y2 <= renderBounds.y2);
2412# endif
2413
2414 RenderActionArgs actionArgs;
2415 actionArgs.byPassCache = byPassCache;
2416 actionArgs.processChannels = processChannels;
2417 actionArgs.mappedScale.x = actionArgs.mappedScale.y = Image::getScaleFromMipMapLevel( firstPlane.renderMappedImage->getMipMapLevel() );
2418 assert( !( (_publicInterface->supportsRenderScaleMaybe() == eSupportsNo) && !(actionArgs.mappedScale.x == 1. && actionArgs.mappedScale.y == 1.) ) );
2419 actionArgs.originalScale.x = Image::getScaleFromMipMapLevel(mipMapLevel);
2420 actionArgs.originalScale.y = actionArgs.originalScale.x;
2421 actionArgs.draftMode = frameArgs->draftMode;
2422 actionArgs.useOpenGL = planes.useOpenGL;
2423
2424 std::list<std::pair<ImagePlaneDesc, ImagePtr> > tmpPlanes;
2425 bool multiPlanar = _publicInterface->isMultiPlanar();
2426
2427 actionArgs.roi = renderMappedRectToRender;
2428
2429
2430 // Setup the context when rendering using OpenGL
2431 OSGLContextPtr glContext;
2432 boost::scoped_ptr<OSGLContextAttacher> glContextAttacher;
2433 if (planes.useOpenGL) {
2434 // Setup the viewport and the framebuffer
2435 glContext = frameArgs->openGLContext.lock();
2436 AbortableRenderInfoPtr abortInfo = frameArgs->abortInfo.lock();

Callers

nothing calls this directly

Calls 15

attachMethod · 0.80
getFBOIdMethod · 0.80
getComponentsMethod · 0.80
getMetadataComponentsMethod · 0.80
emptyMethod · 0.80
fillZeroMethod · 0.80
addRenderInfosForNodeMethod · 0.80
getTimeSinceCreationMethod · 0.80
renderRoIMethod · 0.80
convertToFormatMethod · 0.80

Tested by

no test coverage detected