MCPcopy Create free account
hub / github.com/RavEngine/RavEngine / ByteBuffer ConvertImageBuffer

Function ByteBuffer ConvertImageBuffer

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

Source from the content-addressed store, hash-verified

637}
638
639LLGL_EXPORT ByteBuffer ConvertImageBuffer(
640 const SrcImageDescriptor& srcImageDesc,
641 ImageFormat dstFormat,
642 DataType dstDataType,
643 std::size_t threadCount)
644{
645 /* Validate input parameters */
646 ValidateSourceImageDesc(srcImageDesc);
647 ValidateImageConversionParams(srcImageDesc, dstFormat, dstDataType);
648
649 if (threadCount >= Constants::maxThreadCount)
650 threadCount = std::thread::hardware_concurrency();
651
652 /* Initialize destination image descriptor */
653 auto srcNumPixels = srcImageDesc.dataSize / (DataTypeSize(srcImageDesc.dataType) * ImageFormatSize(srcImageDesc.format));
654
655 DstImageDescriptor dstImageDesc
656 {
657 dstFormat,
658 dstDataType,
659 nullptr,
660 srcNumPixels * DataTypeSize(dstDataType) * ImageFormatSize(dstFormat)
661 };
662
663 if (srcImageDesc.dataType != dstDataType && srcImageDesc.format != dstFormat)
664 {
665 auto dstImage = MakeUniqueArray<char>(dstImageDesc.dataSize);
666 {
667 /* Convert image data type with intermediate buffer */
668 auto intermediateBufferSize = srcImageDesc.dataSize / DataTypeSize(srcImageDesc.dataType) * DataTypeSize(dstDataType);
669 auto intermediateBuffer = MakeUniqueArray<char>(intermediateBufferSize);
670
671 ConvertImageBufferDataType(
672 srcImageDesc.dataType,
673 srcImageDesc.data,
674 srcImageDesc.dataSize,
675 dstDataType,
676 intermediateBuffer.get(),
677 intermediateBufferSize,
678 threadCount
679 );
680
681 /* Set new source buffer and source data type */
682 const SrcImageDescriptor intermediateImageDesc
683 {
684 srcImageDesc.format,
685 dstDataType,
686 intermediateBuffer.get(),
687 intermediateBufferSize
688 };
689
690 /* Convert image format */
691 dstImageDesc.data = dstImage.get();
692 ConvertImageBufferFormat(intermediateImageDesc, dstImageDesc, threadCount);
693 }
694 return dstImage;
695 }
696 else if (srcImageDesc.dataType != dstDataType)

Callers

nothing calls this directly

Calls 5

ValidateSourceImageDescFunction · 0.85
ConvertImageBufferFormatFunction · 0.85
getMethod · 0.45

Tested by

no test coverage detected