ETCPAK expects BGRA data for ETC
This commit is contained in:
parent
eb555d7559
commit
ebec23d8d8
3 changed files with 17 additions and 0 deletions
|
@ -3798,6 +3798,19 @@ void Image::convert_ra_rgba8_to_rg() {
|
|||
}
|
||||
}
|
||||
|
||||
void Image::convert_rgba8_to_bgra8() {
|
||||
ERR_FAIL_COND(format != FORMAT_RGBA8);
|
||||
ERR_FAIL_COND(!data.size());
|
||||
|
||||
int s = data.size();
|
||||
uint8_t *w = data.ptrw();
|
||||
for (int i = 0; i < s; i += 4) {
|
||||
uint8_t r = w[i];
|
||||
w[i] = w[i + 2]; // Swap R to B
|
||||
w[i + 2] = r; // Swap B to R
|
||||
}
|
||||
}
|
||||
|
||||
Error Image::_load_from_buffer(const Vector<uint8_t> &p_array, ImageMemLoadFunc p_loader) {
|
||||
int buffer_size = p_array.size();
|
||||
|
||||
|
|
|
@ -391,6 +391,7 @@ public:
|
|||
|
||||
void convert_rg_to_ra_rgba8();
|
||||
void convert_ra_rgba8_to_rg();
|
||||
void convert_rgba8_to_bgra8();
|
||||
|
||||
Image(const uint8_t *p_mem_png_jpg, int p_len = -1);
|
||||
Image(const char **p_xpm);
|
||||
|
|
|
@ -111,13 +111,16 @@ void _compress_etcpak(EtcpakType p_compresstype, Image *r_img, float p_lossy_qua
|
|||
Image::Format target_format = Image::FORMAT_RGBA8;
|
||||
if (p_compresstype == EtcpakType::ETCPAK_TYPE_ETC1) {
|
||||
target_format = Image::FORMAT_ETC;
|
||||
r_img->convert_rgba8_to_bgra8(); // It's badly documented but ETCPAK seems to be expected BGRA8 for ETC.
|
||||
} else if (p_compresstype == EtcpakType::ETCPAK_TYPE_ETC2) {
|
||||
target_format = Image::FORMAT_ETC2_RGB8;
|
||||
r_img->convert_rgba8_to_bgra8(); // It's badly documented but ETCPAK seems to be expected BGRA8 for ETC.
|
||||
} else if (p_compresstype == EtcpakType::ETCPAK_TYPE_ETC2_RA_AS_RG) {
|
||||
target_format = Image::FORMAT_ETC2_RA_AS_RG;
|
||||
r_img->convert_rg_to_ra_rgba8();
|
||||
} else if (p_compresstype == EtcpakType::ETCPAK_TYPE_ETC2_ALPHA) {
|
||||
target_format = Image::FORMAT_ETC2_RGBA8;
|
||||
r_img->convert_rgba8_to_bgra8(); // It's badly documented but ETCPAK seems to be expected BGRA8 for ETC.
|
||||
} else if (p_compresstype == EtcpakType::ETCPAK_TYPE_DXT1) {
|
||||
target_format = Image::FORMAT_DXT1;
|
||||
} else if (p_compresstype == EtcpakType::ETCPAK_TYPE_DXT5_RA_AS_RG) {
|
||||
|
|
Loading…
Reference in a new issue