F16 tex
This commit is contained in:
parent
fc85c5318b
commit
95ad5625a9
2 changed files with 60 additions and 15 deletions
|
|
@ -24,13 +24,31 @@ using namespace Crafter;
|
|||
namespace fs = std::filesystem;
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
if (argc != 3) {
|
||||
std::cout << "Usage: crafter-asset <input_file> <output_file>\n";
|
||||
if (argc != 3 && argc != 2) { // Allow the possibility of just one argument (input file)
|
||||
std::cout << "Usage: crafter-asset <input_file> [output_file]\n";
|
||||
return 1;
|
||||
}
|
||||
|
||||
fs::path inputPath = argv[1];
|
||||
fs::path outputPath = argv[2];
|
||||
fs::path outputPath;
|
||||
|
||||
// Check if output path is provided; if not, use input path with a modified extension
|
||||
if (argc == 3) {
|
||||
outputPath = argv[2];
|
||||
} else {
|
||||
// Determine extension type for output
|
||||
std::string extension = inputPath.extension().string();
|
||||
if (extension == ".obj") {
|
||||
outputPath = inputPath;
|
||||
outputPath.replace_extension(".mesh");
|
||||
} else if (extension == ".png") {
|
||||
outputPath = inputPath;
|
||||
outputPath.replace_extension(".tex");
|
||||
} else {
|
||||
std::cerr << "Unsupported file type: " << extension << "\n";
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (!fs::exists(inputPath)) {
|
||||
std::cerr << "Error: Input file does not exist.\n";
|
||||
|
|
@ -47,7 +65,7 @@ int main(int argc, char** argv) {
|
|||
}
|
||||
else if (extension == ".png") {
|
||||
// Load PNG as TextureAsset
|
||||
auto texture = TextureAsset<Vector<std::uint8_t, 4, 0>>::LoadPNG(inputPath);
|
||||
auto texture = TextureAsset<Vector<_Float16, 4, 0>>::LoadPNG(inputPath);
|
||||
texture.Save(outputPath);
|
||||
}
|
||||
else {
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ export namespace Crafter {
|
|||
return tex;
|
||||
}
|
||||
|
||||
static TextureAsset<T> LoadPNG(fs::path path) requires (std::same_as<T, Vector<std::uint8_t, 4, 0>>) {
|
||||
static TextureAsset<T> LoadPNG(fs::path path) {
|
||||
TextureAsset<T> tex;
|
||||
|
||||
std::filesystem::path abs = std::filesystem::absolute(path);
|
||||
|
|
@ -77,23 +77,50 @@ export namespace Crafter {
|
|||
|
||||
tex.pixels.resize(tex.sizeX*tex.sizeY);
|
||||
|
||||
std::memcpy(tex.pixels.data(), data, tex.sizeX * tex.sizeY * 4);
|
||||
|
||||
tex.opaque = OpaqueType::FullyOpaque;
|
||||
|
||||
for(std::uint32_t i = 0; i < tex.sizeX* tex.sizeY; i++) {
|
||||
if(tex.pixels[i].a != 255) {
|
||||
tex.opaque = OpaqueType::SemiOpaque;
|
||||
for(std::uint32_t i2 = i; i2 < tex.sizeX* tex.sizeY; i2++) {
|
||||
if(tex.pixels[i].a != 0 && tex.pixels[i].a != 255) {
|
||||
tex.opaque = OpaqueType::Transparent;
|
||||
return tex;
|
||||
if constexpr(std::same_as<T, _Float16> || std::same_as<T, float> || std::same_as<T, double>) {
|
||||
for(std::uint32_t i = 0; i < sizeX*sizeY; i++) {
|
||||
tex.pixels[i].r = (((T)data[i*4])/255);
|
||||
tex.pixels[i].g = (((T)data[i*4+1])/255);
|
||||
tex.pixels[i].b = (((T)data[i*4+2])/255);
|
||||
tex.pixels[i].a = (((T)data[i*4+3])/255);
|
||||
}
|
||||
|
||||
for(std::uint32_t i = 0; i < tex.sizeX* tex.sizeY; i++) {
|
||||
if(tex.pixels[i].a != 1) {
|
||||
tex.opaque = OpaqueType::SemiOpaque;
|
||||
for(std::uint32_t i2 = i; i2 < tex.sizeX* tex.sizeY; i2++) {
|
||||
if(tex.pixels[i2].a != 0 && tex.pixels[i2].a != 1) {
|
||||
tex.opaque = OpaqueType::Transparent;
|
||||
stbi_image_free(data);
|
||||
return tex;
|
||||
}
|
||||
}
|
||||
stbi_image_free(data);
|
||||
return tex;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
std::memcpy(tex.pixels.data(), data, tex.sizeX * tex.sizeY * 4);
|
||||
|
||||
for(std::uint32_t i = 0; i < tex.sizeX* tex.sizeY; i++) {
|
||||
if(tex.pixels[i].a != 255) {
|
||||
tex.opaque = OpaqueType::SemiOpaque;
|
||||
for(std::uint32_t i2 = i; i2 < tex.sizeX* tex.sizeY; i2++) {
|
||||
if(tex.pixels[i2].a != 0 && tex.pixels[i2].a != 255) {
|
||||
tex.opaque = OpaqueType::Transparent;
|
||||
stbi_image_free(data);
|
||||
return tex;
|
||||
}
|
||||
}
|
||||
stbi_image_free(data);
|
||||
return tex;
|
||||
}
|
||||
return tex;
|
||||
}
|
||||
}
|
||||
|
||||
stbi_image_free(data);
|
||||
return tex;
|
||||
}
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue