This commit is contained in:
Jorijn van der Graaf 2026-04-01 07:30:26 +02:00
commit 95ad5625a9
2 changed files with 60 additions and 15 deletions

View file

@ -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;
}
};