summaryrefslogtreecommitdiffstats
path: root/modules
diff options
context:
space:
mode:
authorclayjohn <claynjohn@gmail.com>2024-11-17 14:03:20 -0800
committerclayjohn <claynjohn@gmail.com>2024-11-17 14:03:20 -0800
commit985dc61386cab2f657acd8049052c182e2f32640 (patch)
treed7e51c9f6022f2c114841add92f0c5285fecdfb7 /modules
parent0f5f3bc9546b46b2029fc8896dc859697f1eab97 (diff)
downloadredot-engine-985dc61386cab2f657acd8049052c182e2f32640.tar.gz
Defer initializing BasisU encoder until it is needed.
This saves a lot of time on startup
Diffstat (limited to 'modules')
-rw-r--r--modules/basis_universal/image_compress_basisu.cpp14
1 files changed, 10 insertions, 4 deletions
diff --git a/modules/basis_universal/image_compress_basisu.cpp b/modules/basis_universal/image_compress_basisu.cpp
index 8ca5dba225..be28d89508 100644
--- a/modules/basis_universal/image_compress_basisu.cpp
+++ b/modules/basis_universal/image_compress_basisu.cpp
@@ -38,13 +38,12 @@
#include <transcoder/basisu_transcoder.h>
#ifdef TOOLS_ENABLED
#include <encoder/basisu_comp.h>
-#endif
-void basis_universal_init() {
-#ifdef TOOLS_ENABLED
- basisu::basisu_encoder_init();
+static Mutex init_mutex;
+static bool initialized = false;
#endif
+void basis_universal_init() {
basist::basisu_transcoder_init();
}
@@ -80,6 +79,13 @@ inline void _basisu_pad_mipmap(const uint8_t *p_image_mip_data, Vector<uint8_t>
}
Vector<uint8_t> basis_universal_packer(const Ref<Image> &p_image, Image::UsedChannels p_channels) {
+ init_mutex.lock();
+ if (!initialized) {
+ basisu::basisu_encoder_init();
+ initialized = true;
+ }
+ init_mutex.unlock();
+
uint64_t start_time = OS::get_singleton()->get_ticks_msec();
Ref<Image> image = p_image->duplicate();