texturec: Added --mipskip option.

This commit is contained in:
Branimir Karadžić
2018-10-08 18:17:16 -07:00
parent ae1c73e8ca
commit 4efac57133

View File

@@ -21,7 +21,6 @@
#include <bx/bx.h>
#include <bx/commandline.h>
#include <bx/file.h>
#include <bx/uint32_t.h>
#include <string>
@@ -36,6 +35,7 @@ struct Options
{
DBG("Options:\n"
"\t maxSize: %d\n"
"\t mipSkip: %d\n"
"\t edge: %f\n"
"\t format: %s\n"
"\t mips: %s\n"
@@ -47,6 +47,7 @@ struct Options
"\t equirect: %s\n"
"\t strip: %s\n"
, maxSize
, mipSkip
, edge
, bimg::getName(format)
, mips ? "true" : "false"
@@ -61,6 +62,7 @@ struct Options
}
uint32_t maxSize = UINT32_MAX;
uint32_t mipSkip = 0;
float edge = 0.0f;
bimg::TextureFormat::Enum format = bimg::TextureFormat::Count;
bimg::Quality::Enum quality = bimg::Quality::Default;
@@ -159,10 +161,21 @@ bimg::ImageContainer* convert(bx::AllocatorI* _allocator, const void* _inputData
const uint32_t blockHeight = outputBlockInfo.blockHeight;
const uint32_t minBlockX = outputBlockInfo.minBlockX;
const uint32_t minBlockY = outputBlockInfo.minBlockY;
uint32_t outputWidth = bx::uint32_max(blockWidth * minBlockX, ( (input->m_width + blockWidth - 1) / blockWidth )*blockWidth);
uint32_t outputHeight = bx::uint32_max(blockHeight * minBlockY, ( (input->m_height + blockHeight - 1) / blockHeight)*blockHeight);
uint32_t outputWidth = bx::max(blockWidth * minBlockX, ( (input->m_width + blockWidth - 1) / blockWidth )*blockWidth);
uint32_t outputHeight = bx::max(blockHeight * minBlockY, ( (input->m_height + blockHeight - 1) / blockHeight)*blockHeight);
uint32_t outputDepth = input->m_depth;
if (_options.mips
&& _options.mipSkip != 0)
{
for (uint32_t ii = 0; ii < _options.mipSkip; ++ii)
{
outputWidth = bx::max(blockWidth * minBlockX, ( ( (outputWidth>>1) + blockWidth - 1) / blockWidth )*blockWidth);
outputHeight = bx::max(blockHeight * minBlockY, ( ( (outputHeight>>1) + blockHeight - 1) / blockHeight)*blockHeight);
outputDepth = bx::max(outputDepth>>1, 1u);
}
}
if (_options.equirect)
{
if (outputDepth == 1
@@ -831,6 +844,7 @@ void help(const char* _error = NULL, bool _showHelp = true)
" -t <format> Output format type (BC1/2/3/4/5, ETC1, PVR14, etc.).\n"
" -q <quality> Encoding quality (default, fastest, highest).\n"
" -m, --mips Generate mip-maps.\n"
" --mipskip <N> Skip <N> number of mips.\n"
" -n, --normalmap Input texture is normal map.\n"
" --equirect Input texture is equirectangular projection of cubemap.\n"
" --strip Input texture is horizontal strip of cubemap.\n"
@@ -997,7 +1011,17 @@ int main(int _argc, const char* _argv[])
{
if (!bx::fromString(&options.maxSize, maxSize) )
{
help("Parsing max size failed.");
help("Parsing `--max` failed.");
return bx::kExitFailure;
}
}
const char* mipSkip = cmdLine.findOption("mipskip");
if (NULL != mipSkip)
{
if (!bx::fromString(&options.mipSkip, mipSkip) )
{
help("Parsing `--mipskip` failed.");
return bx::kExitFailure;
}
}