diff options
Diffstat (limited to 'modules/basis_universal')
-rw-r--r-- | modules/basis_universal/SCsub | 6 | ||||
-rw-r--r-- | modules/basis_universal/register_types.cpp | 34 |
2 files changed, 21 insertions, 19 deletions
diff --git a/modules/basis_universal/SCsub b/modules/basis_universal/SCsub index 1f9fde966d..a44a7f0db3 100644 --- a/modules/basis_universal/SCsub +++ b/modules/basis_universal/SCsub @@ -13,16 +13,14 @@ thirdparty_obj = [] thirdparty_dir = "#thirdparty/basis_universal/" # Sync list with upstream CMakeLists.txt encoder_sources = [ - "apg_bmp.c", - "basisu_astc_decomp.cpp", "basisu_backend.cpp", "basisu_basis_file.cpp", "basisu_bc7enc.cpp", + "basisu_opencl.cpp", "basisu_comp.cpp", "basisu_enc.cpp", "basisu_etc.cpp", "basisu_frontend.cpp", - "basisu_global_selector_palette_helpers.cpp", "basisu_gpu_texture.cpp", "basisu_kernels_sse.cpp", "basisu_pvrtc1_4.cpp", @@ -31,7 +29,7 @@ encoder_sources = [ "basisu_ssim.cpp", "basisu_uastc_enc.cpp", "jpgd.cpp", - "lodepng.cpp", + "pvpngreader.cpp", ] encoder_sources = [thirdparty_dir + "encoder/" + file for file in encoder_sources] transcoder_sources = [thirdparty_dir + "transcoder/basisu_transcoder.cpp"] diff --git a/modules/basis_universal/register_types.cpp b/modules/basis_universal/register_types.cpp index a3c662ba08..18554177d9 100644 --- a/modules/basis_universal/register_types.cpp +++ b/modules/basis_universal/register_types.cpp @@ -49,8 +49,6 @@ enum BasisDecompressFormat { //workaround for lack of ETC2 RG #define USE_RG_AS_RGBA -basist::etc1_global_selector_codebook *sel_codebook = nullptr; - #ifdef TOOLS_ENABLED static Vector<uint8_t> basis_universal_packer(const Ref<Image> &p_image, Image::UsedChannels p_channels) { Vector<uint8_t> budata; @@ -77,18 +75,14 @@ static Vector<uint8_t> basis_universal_packer(const Ref<Image> &p_image, Image:: memcpy(buimg.get_ptr(), r, vec.size()); } - //image->save_png("pepeche.png"); - basisu::basis_compressor_params params; + params.m_uastc = true; params.m_max_endpoint_clusters = 512; params.m_max_selector_clusters = 512; params.m_multithreading = true; - //params.m_no_hybrid_sel_cb = true; //fixme, default on this causes crashes //seems fixed? - params.m_pSel_codebook = sel_codebook; //params.m_quality_level = 0; //params.m_disable_hierarchical_endpoint_codebooks = true; //params.m_no_selector_rdo = true; - params.m_auto_global_sel_pal = false; basisu::job_pool jpool(OS::get_singleton()->get_processor_count()); params.m_pJob_pool = &jpool; @@ -149,12 +143,11 @@ static Vector<uint8_t> basis_universal_packer(const Ref<Image> &p_image, Image:: } #endif // TOOLS_ENABLED -static Ref<Image> basis_universal_unpacker(const Vector<uint8_t> &p_buffer) { +static Ref<Image> basis_universal_unpacker_ptr(const uint8_t *p_data, int p_size) { Ref<Image> image; - const uint8_t *r = p_buffer.ptr(); - const uint8_t *ptr = r; - int size = p_buffer.size(); + const uint8_t *ptr = p_data; + int size = p_size; basist::transcoder_texture_format format = basist::transcoder_texture_format::cTFTotalTextureFormats; Image::Format imgfmt = Image::FORMAT_MAX; @@ -225,7 +218,7 @@ static Ref<Image> basis_universal_unpacker(const Vector<uint8_t> &p_buffer) { ptr += 4; size -= 4; - basist::basisu_transcoder tr(nullptr); + basist::basisu_transcoder tr; ERR_FAIL_COND_V(!tr.validate_header(ptr, size), image); @@ -251,7 +244,7 @@ static Ref<Image> basis_universal_unpacker(const Vector<uint8_t> &p_buffer) { bool ret = tr.transcode_image_level(ptr, size, 0, i, dst + ofs, level.m_total_blocks - i, format); if (!ret) { - printf("failed! on level %i\n", i); + printf("failed! on level %u\n", i); break; }; @@ -265,18 +258,29 @@ static Ref<Image> basis_universal_unpacker(const Vector<uint8_t> &p_buffer) { return image; } +static Ref<Image> basis_universal_unpacker(const Vector<uint8_t> &p_buffer) { + Ref<Image> image; + + const uint8_t *r = p_buffer.ptr(); + int size = p_buffer.size(); + return basis_universal_unpacker_ptr(r, size); +} + void register_basis_universal_types() { #ifdef TOOLS_ENABLED - sel_codebook = new basist::etc1_global_selector_codebook(basist::g_global_selector_cb_size, basist::g_global_selector_cb); + using namespace basisu; + using namespace basist; + basisu_encoder_init(); Image::basis_universal_packer = basis_universal_packer; #endif Image::basis_universal_unpacker = basis_universal_unpacker; + Image::basis_universal_unpacker_ptr = basis_universal_unpacker_ptr; } void unregister_basis_universal_types() { #ifdef TOOLS_ENABLED - delete sel_codebook; Image::basis_universal_packer = nullptr; #endif Image::basis_universal_unpacker = nullptr; + Image::basis_universal_unpacker_ptr = nullptr; } |