From 9d6f22c1c194f126bf61f9adb9801e93e8fae962 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Branimir=20Karad=C5=BEi=C4=87?= Date: Mon, 8 May 2017 17:50:48 -0700 Subject: [PATCH] Fixed cube map convert. --- src/image.cpp | 10 +++++----- src/image_encode.cpp | 41 ++++++++++++++++++++++++++++++----------- 2 files changed, 35 insertions(+), 16 deletions(-) diff --git a/src/image.cpp b/src/image.cpp index 0328339..68d88ad 100644 --- a/src/image.cpp +++ b/src/image.cpp @@ -865,10 +865,8 @@ namespace bimg , 1 < _input.m_numMips ); - const uint8_t bpp = getBitsPerPixel(_dstFormat); const uint16_t numSides = _input.m_numLayers * (_input.m_cubeMap ? 6 : 1); - uint8_t* dst = (uint8_t*)output->m_data ; for (uint16_t side = 0; side < numSides; ++side) { for (uint8_t lod = 0, num = _input.m_numMips; lod < num; ++lod) @@ -876,7 +874,11 @@ namespace bimg ImageMip mip; if (imageGetRawData(_input, side, lod, _input.m_data, _input.m_size, mip) ) { - bool ok = imageConvert(dst + ImageMip dstMip; + imageGetRawData(*output, side, lod, output->m_data, output->m_size, dstMip); + uint8_t* dstData = const_cast(dstMip.m_data); + + bool ok = imageConvert(dstData , _dstFormat , mip.m_data , mip.m_format @@ -888,8 +890,6 @@ namespace bimg , getName(output->m_format) ); BX_UNUSED(ok); - - dst += mip.m_width*mip.m_height*bpp/8; } } } diff --git a/src/image_encode.cpp b/src/image_encode.cpp index 6c15412..67fb3e7 100644 --- a/src/image_encode.cpp +++ b/src/image_encode.cpp @@ -311,17 +311,36 @@ namespace bimg bool imageResizeRgba32fLinear(ImageContainer* _dst, const ImageContainer* _src) { - int result = stbir_resize_float_generic( - (const float*)_src->m_data, _src->m_width, _src->m_height, _src->m_width*16 - , ( float*)_dst->m_data, _dst->m_width, _dst->m_height, _dst->m_width*16 - , 4, 3 - , 0 - , STBIR_EDGE_CLAMP - , STBIR_FILTER_DEFAULT - , STBIR_COLORSPACE_LINEAR - , NULL - ); - return 1 == result; + const uint16_t numSides = _src->m_numLayers * (_src->m_cubeMap ? 6 : 1); + + for (uint16_t side = 0; side < numSides; ++side) + { + bimg::ImageMip srcMip; + bimg::imageGetRawData(*_src, side, 0, _src->m_data, _src->m_size, srcMip); + const float* srcData = (const float*)(srcMip.m_data); + + bimg::ImageMip dstMip; + bimg::imageGetRawData(*_dst, side, 0, _dst->m_data, _dst->m_size, dstMip); + float* dstData = (float*)(dstMip.m_data); + + int result = stbir_resize_float_generic( + (const float*)srcData, _src->m_width, _src->m_height, _src->m_width*16 + , ( float*)dstData, _dst->m_width, _dst->m_height, _dst->m_width*16 + , 4, 3 + , 0 + , STBIR_EDGE_CLAMP + , STBIR_FILTER_DEFAULT + , STBIR_COLORSPACE_LINEAR + , NULL + ); + + if (1 != result) + { + return false; + } + } + + return true; } } // namespace bimg