diff options
Diffstat (limited to 'modules/etc')
| -rw-r--r-- | modules/etc/image_etc.cpp | 14 | ||||
| -rw-r--r-- | modules/etc/texture_loader_pkm.cpp | 9 | ||||
| -rw-r--r-- | modules/etc/texture_loader_pkm.h | 2 |
3 files changed, 15 insertions, 10 deletions
diff --git a/modules/etc/image_etc.cpp b/modules/etc/image_etc.cpp index 24ee8e458e..b3f7b1d94f 100644 --- a/modules/etc/image_etc.cpp +++ b/modules/etc/image_etc.cpp @@ -106,9 +106,15 @@ static void _compress_etc(Image *p_img, float p_lossy_quality, bool force_etc1_f // If VRAM compression is using ETC, but image has alpha, convert to RGBA4444 or LA8 // This saves space while maintaining the alpha channel if (detected_channels == Image::USED_CHANNELS_RGBA) { + + if (p_img->has_mipmaps()) { + // Image doesn't support mipmaps with RGBA4444 textures + p_img->clear_mipmaps(); + } p_img->convert(Image::FORMAT_RGBA4444); return; } else if (detected_channels == Image::USE_CHANNELS_LA) { + p_img->convert(Image::FORMAT_LA8); return; } @@ -143,16 +149,16 @@ static void _compress_etc(Image *p_img, float p_lossy_quality, bool force_etc1_f } } - PoolVector<uint8_t>::Read r = img->get_data().read(); - ERR_FAIL_COND(!r.ptr()); + const uint8_t *r = img->get_data().ptr(); + ERR_FAIL_COND(!r); unsigned int target_size = Image::get_image_data_size(imgw, imgh, etc_format, p_img->has_mipmaps()); int mmc = 1 + (p_img->has_mipmaps() ? Image::get_image_required_mipmaps(imgw, imgh, etc_format) : 0); - PoolVector<uint8_t> dst_data; + Vector<uint8_t> dst_data; dst_data.resize(target_size); - PoolVector<uint8_t>::Write w = dst_data.write(); + uint8_t *w = dst_data.ptrw(); // prepare parameters to be passed to etc2comp int num_cpus = OS::get_singleton()->get_processor_count(); diff --git a/modules/etc/texture_loader_pkm.cpp b/modules/etc/texture_loader_pkm.cpp index facdc2e473..ad0cc91c96 100644 --- a/modules/etc/texture_loader_pkm.cpp +++ b/modules/etc/texture_loader_pkm.cpp @@ -42,7 +42,7 @@ struct ETC1Header { uint16_t origHeight; }; -RES ResourceFormatPKM::load(const String &p_path, const String &p_original_path, Error *r_error) { +RES ResourceFormatPKM::load(const String &p_path, const String &p_original_path, Error *r_error, bool p_use_sub_threads, float *r_progress) { if (r_error) *r_error = ERR_CANT_OPEN; @@ -71,13 +71,12 @@ RES ResourceFormatPKM::load(const String &p_path, const String &p_original_path, h.origWidth = f->get_16(); h.origHeight = f->get_16(); - PoolVector<uint8_t> src_data; + Vector<uint8_t> src_data; uint32_t size = h.texWidth * h.texHeight / 2; src_data.resize(size); - PoolVector<uint8_t>::Write wb = src_data.write(); - f->get_buffer(wb.ptr(), size); - wb.release(); + uint8_t *wb = src_data.ptrw(); + f->get_buffer(wb, size); int mipmaps = h.format; int width = h.origWidth; diff --git a/modules/etc/texture_loader_pkm.h b/modules/etc/texture_loader_pkm.h index 3d52a9ea95..d6011993e3 100644 --- a/modules/etc/texture_loader_pkm.h +++ b/modules/etc/texture_loader_pkm.h @@ -36,7 +36,7 @@ class ResourceFormatPKM : public ResourceFormatLoader { public: - virtual RES load(const String &p_path, const String &p_original_path = "", Error *r_error = NULL); + virtual RES load(const String &p_path, const String &p_original_path = "", Error *r_error = NULL, bool p_use_sub_threads = false, float *r_progress = nullptr); virtual void get_recognized_extensions(List<String> *p_extensions) const; virtual bool handles_type(const String &p_type) const; virtual String get_resource_type(const String &p_path) const; |