MCPcopy Create free account
hub / github.com/RavEngine/RavEngine / CopyImageBufferRegion

Function CopyImageBufferRegion

deps/LLGL/sources/Core/ImageFlags.cpp:758–803  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

756}
757
758LLGL_EXPORT void CopyImageBufferRegion(
759 const DstImageDescriptor& dstImageDesc,
760 const Offset3D& dstOffset,
761 std::uint32_t dstRowStride,
762 std::uint32_t dstSliceStride,
763 const SrcImageDescriptor& srcImageDesc,
764 const Offset3D& srcOffset,
765 std::uint32_t srcRowStride,
766 std::uint32_t srcSliceStride,
767 const Extent3D& extent)
768{
769 /* Validate input parameters */
770 ValidateSourceImageDesc(srcImageDesc);
771 ValidateDestinationImageDesc(dstImageDesc);
772
773 if (srcImageDesc.format != dstImageDesc.format || srcImageDesc.dataType != dstImageDesc.dataType)
774 throw std::invalid_argument("cannot copy image buffer region with source and destination images having different format or data type");
775
776 const auto bpp = GetMemoryFootprint(dstImageDesc.format, dstImageDesc.dataType, 1);
777
778 /* Validate destination image boundaries */
779 const auto dstPos = GetFlattenedImageBufferPos(dstOffset.x, dstOffset.y, dstOffset.z, dstRowStride, dstSliceStride, bpp);
780 const auto dstPosEnd = GetFlattenedImageBufferPosEnd(dstOffset, extent, dstRowStride, dstSliceStride, bpp);
781
782 if (dstPosEnd > dstImageDesc.dataSize)
783 throw std::out_of_range("destination image buffer region out of range");
784
785 /* Validate source image boundaries */
786 const auto srcPos = GetFlattenedImageBufferPos(srcOffset.x, srcOffset.y, srcOffset.z, srcRowStride, srcSliceStride, bpp);
787 const auto srcPosEnd = GetFlattenedImageBufferPosEnd(srcOffset, extent, srcRowStride, srcSliceStride, bpp);
788
789 if (srcPosEnd > srcImageDesc.dataSize)
790 throw std::out_of_range("source image buffer region out of range");
791
792 /* Copy image buffer region */
793 BitBlit(
794 extent,
795 bpp,
796 (reinterpret_cast<char*>(dstImageDesc.data) + dstPos),
797 dstRowStride * bpp,
798 dstSliceStride * bpp,
799 (reinterpret_cast<const char*>(srcImageDesc.data) + srcPos),
800 srcRowStride * bpp,
801 srcSliceStride * bpp
802 );
803}
804
805LLGL_EXPORT ByteBuffer GenerateImageBuffer(
806 ImageFormat format,

Callers 1

BlitMethod · 0.85

Calls 7

ValidateSourceImageDescFunction · 0.85
out_of_rangeClass · 0.85
BitBlitFunction · 0.85
GetMemoryFootprintFunction · 0.50

Tested by

no test coverage detected