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

Function scaleToTexture32bitsGeneric

Engine/ViewerInstance.cpp:2558–2725  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2556
2557template <typename PIX, int maxValue, bool opaque, bool applyMatte, int rOffset, int gOffset, int bOffset>
2558void
2559scaleToTexture32bitsGeneric(const RectI& roi,
2560 const RenderViewerArgs & args,
2561 int nComps,
2562 const UpdateViewerParams::CachedTile& tile,
2563 float *tileBuffer)
2564{
2565 const size_t pixelSize = sizeof(PIX);
2566 const bool luminance = (args.channels == eDisplayChannelsY);
2567 const int dstRowElements = args.renderOnlyRoI ? tile.rect.width() * 4 : args.tileRowElements;
2568 Image::ReadAccess acc = Image::ReadAccess( args.inputImage.get() );
2569 boost::shared_ptr<Image::ReadAccess> matteAcc;
2570
2571 if (applyMatte) {
2572 matteAcc.reset( new Image::ReadAccess( args.matteImage.get() ) );
2573 }
2574
2575 assert( (args.renderOnlyRoI && roi.x1 >= tile.rect.x1 && roi.x2 <= tile.rect.x2 && roi.y1 >= tile.rect.y1 && roi.y2 <= tile.rect.y2) || (!args.renderOnlyRoI && tile.rect.x1 >= roi.x1 && tile.rect.x2 <= roi.x2 && tile.rect.y1 >= roi.y1 && tile.rect.y2 <= roi.y2) );
2576 assert(tile.rect.x2 > tile.rect.x1);
2577
2578 float* dst_pixels;
2579 if (args.renderOnlyRoI) {
2580 dst_pixels = tileBuffer + (roi.y1 - tile.rect.y1) * dstRowElements + (roi.x1 - tile.rect.x1) * 4;
2581 } else {
2582 dst_pixels = tileBuffer + (tile.rect.y1 - tile.rectRounded.y1) * dstRowElements + (tile.rect.x1 - tile.rectRounded.x1) * 4;
2583 }
2584
2585 const int y1 = args.renderOnlyRoI ? roi.y1 : tile.rect.y1;
2586 const int y2 = args.renderOnlyRoI ? roi.y2 : tile.rect.y2;
2587 const int x1 = args.renderOnlyRoI ? roi.x1 : tile.rect.x1;
2588 const int x2 = args.renderOnlyRoI ? roi.x2 : tile.rect.x2;
2589 const float* src_pixels = (const float*)acc.pixelAt(x1, y1);
2590 const int srcRowElements = (const int)args.inputImage->getRowElements();
2591
2592 for (int y = y1; y < y2;
2593 ++y,
2594 dst_pixels += dstRowElements) {
2595 for (int x = 0; x < (x2 - x1);
2596 ++x) {
2597 double r = 0.;
2598 double g = 0.;
2599 double b = 0.;
2600 double a = 0.;
2601
2602 if (nComps >= 4) {
2603 r = (src_pixels && rOffset < nComps) ? src_pixels[x * nComps + rOffset] : 0.;
2604 g = (src_pixels && gOffset < nComps) ? src_pixels[x * nComps + gOffset] : 0.;
2605 b = (src_pixels && bOffset < nComps) ? src_pixels[x * nComps + bOffset] : 0.;
2606 if (opaque) {
2607 a = 1.;
2608 } else {
2609 a = src_pixels ? src_pixels[x * nComps + 3] : 0.;
2610 }
2611 } else if (nComps == 3) {
2612 // coverity[dead_error_line]
2613 r = (src_pixels && rOffset < nComps) ? src_pixels[x * nComps + rOffset] : 0.;
2614 // coverity[dead_error_line]
2615 g = (src_pixels && gOffset < nComps) ? src_pixels[x * nComps + gOffset] : 0.;

Callers

nothing calls this directly

Calls 9

ReadAccessClass · 0.85
getRowElementsMethod · 0.80
widthMethod · 0.45
getMethod · 0.45
resetMethod · 0.45
pixelAtMethod · 0.45

Tested by

no test coverage detected