@@ -156,9 +156,16 @@ void ResourceImporterLayeredTexture::get_import_options(const String &p_path, Li
156156 r_options->push_back (ImportOption (PropertyInfo (Variant::INT, " slices/amount" , PROPERTY_HINT_RANGE, " 1,1024,1,or_greater" ), 1 ));
157157 }
158158 }
159+
160+ r_options->push_back (ImportOption (PropertyInfo (Variant::INT, " basis_universal/uastc_pack_level" , PROPERTY_HINT_ENUM, " Fastest,Faster,Medium,Slower,Slowest" ), 0 ));
161+ r_options->push_back (ImportOption (PropertyInfo (Variant::BOOL, " basis_universal/rdo_enabled" ), false ));
162+ r_options->push_back (ImportOption (PropertyInfo (Variant::FLOAT, " basis_universal/rdo_quality_loss" , PROPERTY_HINT_RANGE, " 0.001,50,0.001" ), 1.0 ));
163+ r_options->push_back (ImportOption (PropertyInfo (Variant::INT, " basis_universal/rdo_dict_size" , PROPERTY_HINT_RANGE, " 64,65536,1" ), 1024 ));
164+ r_options->push_back (ImportOption (PropertyInfo (Variant::BOOL, " basis_universal/zstd_supercompression" ), true ));
165+ r_options->push_back (ImportOption (PropertyInfo (Variant::INT, " basis_universal/zstd_supercompression_level" ), 6 ));
159166}
160167
161- void ResourceImporterLayeredTexture::_save_tex (Vector<Ref<Image>> p_images, const String &p_to_path, int p_compress_mode, float p_lossy, Image::CompressMode p_vram_compression, Image::CompressSource p_csource, Image::UsedChannels used_channels, bool p_mipmaps, bool p_force_po2) {
168+ void ResourceImporterLayeredTexture::_save_tex (Vector<Ref<Image>> p_images, const String &p_to_path, int p_compress_mode, float p_lossy, const Image::BasisUniversalPackerParams &p_basisu_params, Image::CompressMode p_vram_compression, Image::CompressSource p_csource, Image::UsedChannels used_channels, bool p_mipmaps, bool p_force_po2) {
162169 Vector<Ref<Image>> mipmap_images; // for 3D
163170
164171 if (mode == MODE_3D) {
@@ -278,11 +285,11 @@ void ResourceImporterLayeredTexture::_save_tex(Vector<Ref<Image>> p_images, cons
278285 }
279286
280287 for (int i = 0 ; i < p_images.size (); i++) {
281- ResourceImporterTexture::save_to_ctex_format (f, p_images[i], ResourceImporterTexture::CompressMode (p_compress_mode), used_channels, p_vram_compression, p_lossy);
288+ ResourceImporterTexture::save_to_ctex_format (f, p_images[i], ResourceImporterTexture::CompressMode (p_compress_mode), used_channels, p_vram_compression, p_lossy, p_basisu_params );
282289 }
283290
284291 for (int i = 0 ; i < mipmap_images.size (); i++) {
285- ResourceImporterTexture::save_to_ctex_format (f, mipmap_images[i], ResourceImporterTexture::CompressMode (p_compress_mode), used_channels, p_vram_compression, p_lossy);
292+ ResourceImporterTexture::save_to_ctex_format (f, mipmap_images[i], ResourceImporterTexture::CompressMode (p_compress_mode), used_channels, p_vram_compression, p_lossy, p_basisu_params );
286293 }
287294}
288295
@@ -300,6 +307,15 @@ Error ResourceImporterLayeredTexture::import(ResourceUID::ID p_source_id, const
300307 int layout = (p_options.has (" slices/layout" )) ? int (p_options[" slices/layout" ]) : 0 ;
301308 int amount = (p_options.has (" slices/amount" )) ? int (p_options[" slices/amount" ]) : 0 ;
302309
310+ const Image::BasisUniversalPackerParams basisu_params = {
311+ p_options[" basis_universal/uastc_pack_level" ],
312+ p_options[" basis_universal/rdo_enabled" ],
313+ p_options[" basis_universal/rdo_quality_loss" ],
314+ p_options[" basis_universal/rdo_dict_size" ],
315+ p_options[" basis_universal/zstd_supercompression" ],
316+ p_options[" basis_universal/zstd_supercompression_level" ],
317+ };
318+
303319 if (mode == MODE_CUBEMAP || mode == MODE_CUBEMAP_ARRAY) {
304320 switch (arrangement) {
305321 case CUBEMAP_FORMAT_1X6: {
@@ -392,6 +408,8 @@ Error ResourceImporterLayeredTexture::import(ResourceUID::ID p_source_id, const
392408 texture_import->used_channels = used_channels;
393409 texture_import->high_quality = high_quality;
394410
411+ texture_import->basisu_params = basisu_params;
412+
395413 _check_compress_ctex (p_source_file, texture_import);
396414 if (r_metadata) {
397415 Dictionary meta;
@@ -486,7 +504,8 @@ void ResourceImporterLayeredTexture::_check_compress_ctex(const String &p_source
486504 ERR_FAIL_NULL (r_texture_import->csource );
487505 if (r_texture_import->compress_mode != COMPRESS_VRAM_COMPRESSED) {
488506 // Import normally.
489- _save_tex (*r_texture_import->slices , r_texture_import->save_path + " ." + extension, r_texture_import->compress_mode , r_texture_import->lossy , Image::COMPRESS_S3TC /* IGNORED */ , *r_texture_import->csource , r_texture_import->used_channels , r_texture_import->mipmaps , false );
507+ _save_tex (*r_texture_import->slices , r_texture_import->save_path + " ." + extension, r_texture_import->compress_mode , r_texture_import->lossy , r_texture_import->basisu_params ,
508+ Image::COMPRESS_S3TC /* IGNORED */ , *r_texture_import->csource , r_texture_import->used_channels , r_texture_import->mipmaps , false );
490509 return ;
491510 }
492511 // Must import in all formats, in order of priority (so platform chooses the best supported one. IE, etc2 over etc).
@@ -541,7 +560,8 @@ void ResourceImporterLayeredTexture::_check_compress_ctex(const String &p_source
541560 }
542561
543562 if (use_uncompressed) {
544- _save_tex (*r_texture_import->slices , r_texture_import->save_path + " ." + extension, COMPRESS_VRAM_UNCOMPRESSED, r_texture_import->lossy , Image::COMPRESS_S3TC /* IGNORED */ , *r_texture_import->csource , r_texture_import->used_channels , r_texture_import->mipmaps , false );
563+ _save_tex (*r_texture_import->slices , r_texture_import->save_path + " ." + extension, COMPRESS_VRAM_UNCOMPRESSED, r_texture_import->lossy , r_texture_import->basisu_params ,
564+ Image::COMPRESS_S3TC /* IGNORED */ , *r_texture_import->csource , r_texture_import->used_channels , r_texture_import->mipmaps , false );
545565 } else {
546566 if (can_s3tc_bptc) {
547567 Image::CompressMode image_compress_mode;
@@ -553,7 +573,7 @@ void ResourceImporterLayeredTexture::_check_compress_ctex(const String &p_source
553573 image_compress_mode = Image::COMPRESS_S3TC;
554574 image_compress_format = " s3tc" ;
555575 }
556- _save_tex (*r_texture_import->slices , r_texture_import->save_path + " ." + image_compress_format + " ." + extension, r_texture_import->compress_mode , r_texture_import->lossy , image_compress_mode, *r_texture_import->csource , r_texture_import->used_channels , r_texture_import->mipmaps , true );
576+ _save_tex (*r_texture_import->slices , r_texture_import->save_path + " ." + image_compress_format + " ." + extension, r_texture_import->compress_mode , r_texture_import->lossy , r_texture_import-> basisu_params , image_compress_mode, *r_texture_import->csource , r_texture_import->used_channels , r_texture_import->mipmaps , true );
557577 r_texture_import->platform_variants ->push_back (image_compress_format);
558578 }
559579
@@ -567,7 +587,7 @@ void ResourceImporterLayeredTexture::_check_compress_ctex(const String &p_source
567587 image_compress_mode = Image::COMPRESS_ETC2;
568588 image_compress_format = " etc2" ;
569589 }
570- _save_tex (*r_texture_import->slices , r_texture_import->save_path + " ." + image_compress_format + " ." + extension, r_texture_import->compress_mode , r_texture_import->lossy , image_compress_mode, *r_texture_import->csource , r_texture_import->used_channels , r_texture_import->mipmaps , true );
590+ _save_tex (*r_texture_import->slices , r_texture_import->save_path + " ." + image_compress_format + " ." + extension, r_texture_import->compress_mode , r_texture_import->lossy , r_texture_import-> basisu_params , image_compress_mode, *r_texture_import->csource , r_texture_import->used_channels , r_texture_import->mipmaps , true );
571591 r_texture_import->platform_variants ->push_back (image_compress_format);
572592 }
573593 }
0 commit comments