From bf830a85f5fc0e615aad445dbd7985031a6e754e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=91=D1=80=D0=B0=D0=BD=D0=B8=D0=BC=D0=B8=D1=80=20=D0=9A?= =?UTF-8?q?=D0=B0=D1=80=D0=B0=D1=9F=D0=B8=D1=9B?= Date: Wed, 25 Nov 2020 17:08:29 -0800 Subject: [PATCH] texturec: Added support for vertical cubemap strip. --- src/image.cpp | 8 ++++---- src/image_cubemap_filter.cpp | 8 +++++--- tools/texturec/texturec.cpp | 19 +++++++++---------- 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/src/image.cpp b/src/image.cpp index 20df305..fc641dd 100644 --- a/src/image.cpp +++ b/src/image.cpp @@ -571,8 +571,8 @@ namespace bimg for (uint16_t side = 0; side < numSides; ++side) { - bimg::ImageMip mip; - bimg::imageGetRawData(*_imageContainer, side, 0, _imageContainer->m_data, _imageContainer->m_size, mip); + ImageMip mip; + imageGetRawData(*_imageContainer, side, 0, _imageContainer->m_data, _imageContainer->m_size, mip); const uint32_t pitch = _imageContainer->m_width*16; const uint32_t slice = _imageContainer->m_height*pitch; @@ -617,8 +617,8 @@ namespace bimg for (uint16_t side = 0; side < numSides; ++side) { - bimg::ImageMip mip; - bimg::imageGetRawData(*_imageContainer, side, 0, _imageContainer->m_data, _imageContainer->m_size, mip); + ImageMip mip; + imageGetRawData(*_imageContainer, side, 0, _imageContainer->m_data, _imageContainer->m_size, mip); const uint32_t pitch = _imageContainer->m_width*16; const uint32_t slice = _imageContainer->m_height*pitch; diff --git a/src/image_cubemap_filter.cpp b/src/image_cubemap_filter.cpp index b2f2ee8..93bbfda 100644 --- a/src/image_cubemap_filter.cpp +++ b/src/image_cubemap_filter.cpp @@ -336,15 +336,17 @@ namespace bimg if (_input.m_depth != 1 && _input.m_numLayers != 1 && _input.m_format != TextureFormat::RGBA32F - && _input.m_width/6 != _input.m_height) + && ( (_input.m_width != _input.m_height*6) || (_input.m_width*6 != _input.m_height) ) ) { BX_ERROR_SET(_err, BIMG_ERROR, "Input image format is not strip projection."); return NULL; } + const bool horizontal = _input.m_width == _input.m_height*6; const uint32_t srcPitch = _input.m_width*16; - const uint32_t dstWidth = _input.m_height; + const uint32_t dstWidth = horizontal ? _input.m_height : _input.m_width; const uint32_t dstPitch = dstWidth*16; + const uint32_t step = horizontal ? dstPitch : dstPitch*dstWidth; ImageContainer* output = imageAlloc(_allocator , _input.m_format @@ -358,7 +360,7 @@ namespace bimg const uint8_t* srcData = (const uint8_t*)_input.m_data; - for (uint8_t side = 0; side < 6 && _err->isOk(); ++side, srcData += dstPitch) + for (uint8_t side = 0; side < 6 && _err->isOk(); ++side, srcData += step) { ImageMip dstMip; imageGetRawData(*output, side, 0, output->m_data, output->m_size, dstMip); diff --git a/tools/texturec/texturec.cpp b/tools/texturec/texturec.cpp index ca03362..77f9f6f 100644 --- a/tools/texturec/texturec.cpp +++ b/tools/texturec/texturec.cpp @@ -195,20 +195,19 @@ bimg::ImageContainer* convert(bx::AllocatorI* _allocator, const void* _inputData } else if (_options.strip) { - if (outputDepth == 1 - && outputWidth/6 == outputHeight) + if (outputDepth == 1 + && ( (outputWidth == outputHeight*6) || (outputWidth*6 == outputHeight) ) ) { - if (outputWidth/6 > _options.maxSize) - { - outputWidth = _options.maxSize*6; - outputHeight = _options.maxSize; - } + const bool horizontal = outputWidth == outputHeight*6; + + outputWidth = bx::min(outputWidth, horizontal ? _options.maxSize*6 : _options.maxSize); + outputHeight = bx::min(outputHeight, horizontal ? _options.maxSize : _options.maxSize*6); } else { bimg::imageFree(input); - BX_ERROR_SET(_err, TEXTRUREC_ERROR, "Input image format is not horizontal strip."); + BX_ERROR_SET(_err, TEXTRUREC_ERROR, "Input image format is not horizontal or vertical strip."); return NULL; } } @@ -325,7 +324,7 @@ bimg::ImageContainer* convert(bx::AllocatorI* _allocator, const void* _inputData bimg::ImageContainer* dst; - if (outputWidth/2 == outputHeight) + if (outputWidth == outputHeight*2) { dst = bimg::imageCubemapFromLatLongRgba32F(_allocator, *src, true, _err); bimg::imageFree(src); @@ -933,7 +932,7 @@ void help(const char* _error = NULL, bool _showHelp = true) " --mipskip Skip number of mips.\n" " -n, --normalmap Input texture is normal map. (Implies --linear)\n" " --equirect Input texture is equirectangular projection of cubemap.\n" - " --strip Input texture is horizontal strip of cubemap.\n" + " --strip Input texture is horizontal or vertical strip of cubemap.\n" " --sdf Compute SDF texture.\n" " --ref Alpha reference value.\n" " --iqa Image Quality Assessment\n"