@@ -156,9 +156,16 @@ void ResourceImporterLayeredTexture::get_import_options(const String &p_path, Li
156
156
r_options->push_back (ImportOption (PropertyInfo (Variant::INT, " slices/amount" , PROPERTY_HINT_RANGE, " 1,1024,1,or_greater" ), 1 ));
157
157
}
158
158
}
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 ));
159
166
}
160
167
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) {
162
169
Vector<Ref<Image>> mipmap_images; // for 3D
163
170
164
171
if (mode == MODE_3D) {
@@ -278,11 +285,11 @@ void ResourceImporterLayeredTexture::_save_tex(Vector<Ref<Image>> p_images, cons
278
285
}
279
286
280
287
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 );
282
289
}
283
290
284
291
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 );
286
293
}
287
294
}
288
295
@@ -300,6 +307,15 @@ Error ResourceImporterLayeredTexture::import(ResourceUID::ID p_source_id, const
300
307
int layout = (p_options.has (" slices/layout" )) ? int (p_options[" slices/layout" ]) : 0 ;
301
308
int amount = (p_options.has (" slices/amount" )) ? int (p_options[" slices/amount" ]) : 0 ;
302
309
310
+ const Image::BasisUniversalPackerParams basisu_params{
311
+ .uastc_pack_level = p_options[" basis_universal/uastc_pack_level" ],
312
+ .rdo_enabled = p_options[" basis_universal/rdo_enabled" ],
313
+ .rdo_quality_loss = p_options[" basis_universal/rdo_quality_loss" ],
314
+ .rdo_dict_size = p_options[" basis_universal/rdo_dict_size" ],
315
+ .zstd_supercompression = p_options[" basis_universal/zstd_supercompression" ],
316
+ .zstd_supercompression_level = p_options[" basis_universal/zstd_supercompression_level" ],
317
+ };
318
+
303
319
if (mode == MODE_CUBEMAP || mode == MODE_CUBEMAP_ARRAY) {
304
320
switch (arrangement) {
305
321
case CUBEMAP_FORMAT_1X6: {
@@ -392,6 +408,8 @@ Error ResourceImporterLayeredTexture::import(ResourceUID::ID p_source_id, const
392
408
texture_import->used_channels = used_channels;
393
409
texture_import->high_quality = high_quality;
394
410
411
+ texture_import->basisu_params = basisu_params;
412
+
395
413
_check_compress_ctex (p_source_file, texture_import);
396
414
if (r_metadata) {
397
415
Dictionary meta;
@@ -486,7 +504,8 @@ void ResourceImporterLayeredTexture::_check_compress_ctex(const String &p_source
486
504
ERR_FAIL_NULL (r_texture_import->csource );
487
505
if (r_texture_import->compress_mode != COMPRESS_VRAM_COMPRESSED) {
488
506
// 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 );
490
509
return ;
491
510
}
492
511
// 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
541
560
}
542
561
543
562
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 );
545
565
} else {
546
566
if (can_s3tc_bptc) {
547
567
Image::CompressMode image_compress_mode;
@@ -553,7 +573,7 @@ void ResourceImporterLayeredTexture::_check_compress_ctex(const String &p_source
553
573
image_compress_mode = Image::COMPRESS_S3TC;
554
574
image_compress_format = " s3tc" ;
555
575
}
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 );
557
577
r_texture_import->platform_variants ->push_back (image_compress_format);
558
578
}
559
579
@@ -567,7 +587,7 @@ void ResourceImporterLayeredTexture::_check_compress_ctex(const String &p_source
567
587
image_compress_mode = Image::COMPRESS_ETC2;
568
588
image_compress_format = " etc2" ;
569
589
}
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 );
571
591
r_texture_import->platform_variants ->push_back (image_compress_format);
572
592
}
573
593
}
0 commit comments