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

Method renderHandler

Engine/EffectInstance.cpp:2386–2920  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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