@@ -125,6 +125,11 @@ bool ResourceImporterLayeredTexture::get_option_visibility(const String &p_path,
125
125
if ((p_option == " compress/high_quality" || p_option == " compress/hdr_compression" ) && p_options.has (" compress/mode" )) {
126
126
return int (p_options[" compress/mode" ]) == COMPRESS_VRAM_COMPRESSED;
127
127
}
128
+
129
+ if ((int )(p_options[" compress/mode" ]) != COMPRESS_BASIS_UNIVERSAL && p_option.begins_with (" basis_universal/" )) {
130
+ return false ;
131
+ }
132
+
128
133
return true ;
129
134
}
130
135
@@ -156,9 +161,17 @@ void ResourceImporterLayeredTexture::get_import_options(const String &p_path, Li
156
161
r_options->push_back (ImportOption (PropertyInfo (Variant::INT, " slices/amount" , PROPERTY_HINT_RANGE, " 1,1024,1,or_greater" ), 1 ));
157
162
}
158
163
}
164
+
165
+ Image::BasisUniversalPackerParams basisu_params;
166
+ r_options->push_back (ImportOption (PropertyInfo (Variant::INT, " basis_universal/uastc_level" , PROPERTY_HINT_ENUM, " Fastest,Faster,Medium,Slower,Slowest" ), basisu_params.uastc_level ));
167
+ r_options->push_back (ImportOption (PropertyInfo (Variant::BOOL, " basis_universal/rdo_enabled" ), basisu_params.rdo_enabled ));
168
+ r_options->push_back (ImportOption (PropertyInfo (Variant::FLOAT, " basis_universal/rdo_quality_loss" , PROPERTY_HINT_RANGE, " 0.001,50,0.001" ), basisu_params.rdo_quality_loss ));
169
+ r_options->push_back (ImportOption (PropertyInfo (Variant::INT, " basis_universal/rdo_dict_size" , PROPERTY_HINT_RANGE, " 64,65536,1" ), basisu_params.rdo_dict_size ));
170
+ r_options->push_back (ImportOption (PropertyInfo (Variant::BOOL, " basis_universal/zstd_supercompression" ), basisu_params.zstd_supercompression ));
171
+ r_options->push_back (ImportOption (PropertyInfo (Variant::INT, " basis_universal/zstd_supercompression_level" , PROPERTY_HINT_RANGE, " 1,22,1" ), basisu_params.zstd_supercompression_level ));
159
172
}
160
173
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) {
174
+ 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) {
162
175
Vector<Ref<Image>> mipmap_images; // for 3D
163
176
164
177
if (mode == MODE_3D) {
@@ -278,11 +291,11 @@ void ResourceImporterLayeredTexture::_save_tex(Vector<Ref<Image>> p_images, cons
278
291
}
279
292
280
293
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);
294
+ ResourceImporterTexture::save_to_ctex_format (f, p_images[i], ResourceImporterTexture::CompressMode (p_compress_mode), used_channels, p_vram_compression, p_lossy, p_basisu_params );
282
295
}
283
296
284
297
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);
298
+ ResourceImporterTexture::save_to_ctex_format (f, mipmap_images[i], ResourceImporterTexture::CompressMode (p_compress_mode), used_channels, p_vram_compression, p_lossy, p_basisu_params );
286
299
}
287
300
}
288
301
@@ -375,6 +388,16 @@ Error ResourceImporterLayeredTexture::import(ResourceUID::ID p_source_id, const
375
388
slices.push_back (slice);
376
389
}
377
390
}
391
+
392
+ const Image::BasisUniversalPackerParams basisu_params = {
393
+ p_options[" basis_universal/uastc_level" ],
394
+ p_options[" basis_universal/rdo_enabled" ],
395
+ p_options[" basis_universal/rdo_quality_loss" ],
396
+ p_options[" basis_universal/rdo_dict_size" ],
397
+ p_options[" basis_universal/zstd_supercompression" ],
398
+ p_options[" basis_universal/zstd_supercompression_level" ],
399
+ };
400
+
378
401
Array formats_imported;
379
402
Ref<LayeredTextureImport> texture_import;
380
403
texture_import.instantiate ();
@@ -392,6 +415,8 @@ Error ResourceImporterLayeredTexture::import(ResourceUID::ID p_source_id, const
392
415
texture_import->used_channels = used_channels;
393
416
texture_import->high_quality = high_quality;
394
417
418
+ texture_import->basisu_params = basisu_params;
419
+
395
420
_check_compress_ctex (p_source_file, texture_import);
396
421
if (r_metadata) {
397
422
Dictionary meta;
@@ -486,7 +511,8 @@ void ResourceImporterLayeredTexture::_check_compress_ctex(const String &p_source
486
511
ERR_FAIL_NULL (r_texture_import->csource );
487
512
if (r_texture_import->compress_mode != COMPRESS_VRAM_COMPRESSED) {
488
513
// 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 );
514
+ _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 ,
515
+ Image::COMPRESS_S3TC /* IGNORED */ , *r_texture_import->csource , r_texture_import->used_channels , r_texture_import->mipmaps , false );
490
516
return ;
491
517
}
492
518
// Must import in all formats, in order of priority (so platform chooses the best supported one. IE, etc2 over etc).
@@ -541,7 +567,8 @@ void ResourceImporterLayeredTexture::_check_compress_ctex(const String &p_source
541
567
}
542
568
543
569
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 );
570
+ _save_tex (*r_texture_import->slices , r_texture_import->save_path + " ." + extension, COMPRESS_VRAM_UNCOMPRESSED, r_texture_import->lossy , r_texture_import->basisu_params ,
571
+ Image::COMPRESS_S3TC /* IGNORED */ , *r_texture_import->csource , r_texture_import->used_channels , r_texture_import->mipmaps , false );
545
572
} else {
546
573
if (can_s3tc_bptc) {
547
574
Image::CompressMode image_compress_mode;
@@ -553,7 +580,7 @@ void ResourceImporterLayeredTexture::_check_compress_ctex(const String &p_source
553
580
image_compress_mode = Image::COMPRESS_S3TC;
554
581
image_compress_format = " s3tc" ;
555
582
}
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 );
583
+ _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 );
557
584
r_texture_import->platform_variants ->push_back (image_compress_format);
558
585
}
559
586
@@ -567,7 +594,7 @@ void ResourceImporterLayeredTexture::_check_compress_ctex(const String &p_source
567
594
image_compress_mode = Image::COMPRESS_ETC2;
568
595
image_compress_format = " etc2" ;
569
596
}
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 );
597
+ _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 );
571
598
r_texture_import->platform_variants ->push_back (image_compress_format);
572
599
}
573
600
}
0 commit comments