Explorar el Código

Fixed cube map convert.

Branimir Karadžić hace 8 años
padre
commit
9d6f22c1c1
Se han modificado 2 ficheros con 35 adiciones y 16 borrados
  1. 5 5
      src/image.cpp
  2. 30 11
      src/image_encode.cpp

+ 5 - 5
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<uint8_t*>(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;
 				}
 			}
 		}

+ 30 - 11
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