Can select image file format with -f argument in gltf util

Signed-off-by: Arthur Brainville (Ybalrid) <ybalrid@ybalrid.info>
This commit is contained in:
Arthur Brainville 2018-03-19 20:24:00 +01:00
parent 4ba01f5968
commit 2960379eba
No known key found for this signature in database
GPG Key ID: BC05C4812A06BCF3
4 changed files with 45 additions and 3 deletions

View File

@ -4,6 +4,8 @@
#include <iostream>
#include <string>
#include "texture_dumper.h"
namespace gltfutil {
enum class ui_mode { cli, interactive };
@ -45,6 +47,9 @@ struct configuration {
std::string input_path, output_dir;
ui_mode mode;
cli_action action = cli_action::not_set;
texture_dumper::texture_output_format requested_format =
texture_dumper::texture_output_format::not_specified;
bool has_output_dir;
bool is_valid() {
// TODO impl check

View File

@ -16,10 +16,12 @@ int usage(int ret = 0) {
using std::cout;
cout << "gltfutil: tool for manipulating gltf files\n"
<< " usage information:\n\n"
<< "\t gltfutil (-d|-h) [path to .gltf/glb] (-o [path to output "
"directory])\n\n"
<< "\t gltfutil (-d|-h|) (-f [png|bmp|tga]) [path to .gltf/glb] (-o "
"[path to output directory])\n\n"
//<< "\t\t -i: start in interactive mode\n"
<< "\t\t -d: dump enclosed content (image assets)\n"
<< "\t\t -f: file format for image output"
<< "\t\t -o: ouptput directory path"
<< "\t\t -h: print this help\n";
return ret;
}
@ -49,6 +51,11 @@ int parse_args(int argc, char** argv) {
i++;
config.output_dir = argv[i];
break;
case 'f':
i++;
config.requested_format =
texture_dumper::get_fromat_from_string(argv[i]);
break;
default:
return arg_error();
}
@ -85,12 +92,19 @@ int parse_args(int argc, char** argv) {
switch (config.action) {
case cli_action::help:
return usage();
break;
case cli_action::dump: {
texture_dumper dumper(model);
if (config.requested_format !=
texture_dumper::texture_output_format::not_specified)
dumper.set_output_format(config.requested_format);
if (config.output_dir.empty())
dumper.dump_to_folder();
else
dumper.dump_to_folder(config.output_dir);
} break;
default:
return arg_error();

View File

@ -3,6 +3,8 @@
#include "stb_image_write.h"
#include "texture_dumper.h"
#include <tiny_gltf.h>
using namespace gltfutil;
using namespace tinygltf;
using std::cout;
@ -15,7 +17,8 @@ texture_dumper::texture_dumper(const Model& input)
void texture_dumper::dump_to_folder(const std::string& path) {
cout << "dumping to folder " << path << '\n';
cout << "model file has " << model.textures.size() << " textures.\n";
size_t index;
size_t index = 0;
for (const auto& texture : model.textures) {
index++;
const auto& image = model.images[texture.source];
@ -23,6 +26,7 @@ void texture_dumper::dump_to_folder(const std::string& path) {
cout << "image size is: " << image.width << 'x' << image.height << '\n';
cout << "pixel channel count :" << image.component << '\n';
std::string name = image.name.empty() ? std::to_string(index) : image.name;
switch (configured_format) {
case texture_output_format::png:
name = path + "/" + name + ".png";
@ -45,3 +49,19 @@ void texture_dumper::dump_to_folder(const std::string& path) {
}
}
}
void texture_dumper::set_output_format(texture_output_format format) {
configured_format = format;
}
texture_dumper::texture_output_format texture_dumper::get_fromat_from_string(
const std::string& str) {
std::string type = str;
std::transform(str.begin(), str.end(), type.begin(), ::tolower);
if (type == "png") return texture_output_format::png;
if (type == "bmp") return texture_output_format::bmp;
if (type == "tga") return texture_output_format::tga;
return texture_output_format::not_specified;
}

View File

@ -16,5 +16,8 @@ class texture_dumper {
public:
texture_dumper(const tinygltf::Model& inputModel);
void dump_to_folder(const std::string& path = "./");
void set_output_format(texture_output_format format);
static texture_output_format get_fromat_from_string(const std::string& str);
};
} // namespace gltfutil