Explorar el Código

Defer initializing BasisU encoder until it is needed.

This saves a lot of time on startup
clayjohn hace 8 meses
padre
commit
985dc61386
Se han modificado 1 ficheros con 10 adiciones y 4 borrados
  1. 10 4
      modules/basis_universal/image_compress_basisu.cpp

+ 10 - 4
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();