From 94a52c712255551da6254b944e45e730bc0804fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Branimir=20Karad=C5=BEi=C4=87?= Date: Wed, 13 Jun 2018 17:14:18 -0700 Subject: [PATCH] texturec: More intuitive scaling of equirectangular texture. --- tools/texturec/texturec.cpp | 39 ++++++++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/tools/texturec/texturec.cpp b/tools/texturec/texturec.cpp index 58321cb..70c1e27 100644 --- a/tools/texturec/texturec.cpp +++ b/tools/texturec/texturec.cpp @@ -26,7 +26,9 @@ #include #define BIMG_TEXTUREC_VERSION_MAJOR 1 -#define BIMG_TEXTUREC_VERSION_MINOR 15 +#define BIMG_TEXTUREC_VERSION_MINOR 16 + +BX_ERROR_RESULT(TEXTRUREC_ERROR, BX_MAKEFOURCC('t', 'c', 0, 0) ); struct Options { @@ -168,9 +170,28 @@ bimg::ImageContainer* convert(bx::AllocatorI* _allocator, const void* _inputData uint32_t outputHeight = bx::uint32_max(blockHeight * minBlockY, ( (input->m_height + blockHeight - 1) / blockHeight)*blockHeight); uint32_t outputDepth = input->m_depth; - if (outputWidth > _options.maxSize - || outputHeight > _options.maxSize - || outputDepth > _options.maxSize) + if (_options.equirect) + { + if (outputDepth == 1 + && outputWidth/2 == outputHeight) + { + if (outputWidth/2 > _options.maxSize) + { + outputWidth = _options.maxSize*4; + outputHeight = _options.maxSize*2; + } + } + else + { + bimg::imageFree(input); + + BX_ERROR_SET(_err, TEXTRUREC_ERROR, "Input image format is not equirectangular projection."); + return NULL; + } + } + else if (outputWidth > _options.maxSize + || outputHeight > _options.maxSize + || outputDepth > _options.maxSize) { if (outputDepth > outputWidth && outputDepth > outputHeight) @@ -890,8 +911,8 @@ int main(int _argc, const char* _argv[]) } } - options.mips = cmdLine.hasArg('m', "mips"); - options.normalMap = cmdLine.hasArg('n', "normalmap"); + options.mips = cmdLine.hasArg('m', "mips"); + options.normalMap = cmdLine.hasArg('n', "normalmap"); options.equirect = cmdLine.hasArg("equirect"); options.iqa = cmdLine.hasArg("iqa"); options.pma = cmdLine.hasArg("pma"); @@ -899,7 +920,11 @@ int main(int _argc, const char* _argv[]) const char* maxSize = cmdLine.findOption("max"); if (NULL != maxSize) { - options.maxSize = atoi(maxSize); + if (!bx::fromString(&options.maxSize, maxSize) ) + { + help("Parsing max size failed."); + return bx::kExitFailure; + } } options.format = bimg::TextureFormat::Count;