mirror of
https://git.mirrors.martin98.com/https://github.com/syoyo/tinygltf.git
synced 2025-07-07 20:11:47 +08:00

Asset loading failure messages(e.g. image file is missing) are now stored in `warning` message, not `error` message.
69 lines
2.3 KiB
C++
69 lines
2.3 KiB
C++
#include <iostream>
|
|
#include <algorithm>
|
|
|
|
#include "stb_image_write.h"
|
|
#include "texture_dumper.h"
|
|
|
|
#include <tiny_gltf.h>
|
|
|
|
using namespace gltfutil;
|
|
using namespace tinygltf;
|
|
using std::cout;
|
|
|
|
texture_dumper::texture_dumper(const Model& input)
|
|
: model(input), configured_format(texture_output_format::png) {
|
|
cout << "Texture dumper\n";
|
|
}
|
|
|
|
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 = 0;
|
|
|
|
for (const auto& texture : model.textures) {
|
|
index++;
|
|
const auto& image = model.images[texture.source];
|
|
cout << "image name is: \"" << image.name << "\"\n";
|
|
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";
|
|
std::cout << "Image will be written to " << name << '\n';
|
|
stbi_write_png(name.c_str(), image.width, image.height, image.component,
|
|
image.image.data(), 0);
|
|
break;
|
|
case texture_output_format::bmp:
|
|
std::cout << "Image will be written to " << name << '\n';
|
|
name = path + "/" + name + ".bmp";
|
|
stbi_write_bmp(name.c_str(), image.width, image.height, image.component,
|
|
image.image.data());
|
|
break;
|
|
case texture_output_format::tga:
|
|
std::cout << "Image will be written to " << name << '\n';
|
|
name = path + "/" + name + ".tga";
|
|
stbi_write_tga(name.c_str(), image.width, image.height, image.component,
|
|
image.image.data());
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
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;
|
|
}
|