MCPcopy Create free account
hub / github.com/defold/defold / BasisUEncode

Function BasisUEncode

engine/texc/src/texc_enc_basis.cpp:192–234  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

190 }
191
192 bool BasisUEncode(BasisUEncodeSettings* input, uint8_t** out, uint32_t* out_size)
193 {
194 InitBasisU();
195
196 // During refactoring, we'll reuse the old code
197 TextureImpl impl;
198 impl.m_CompressionType = CT_BASIS_UASTC;
199 bool res = CreateBasis(&impl, input->m_Width, input->m_Height, input->m_PixelFormat, input->m_ColorSpace, impl.m_CompressionType, input->m_Data);
200 if (!res)
201 {
202 dmLogError("Failed to encode Basis texture: %s\n", input->m_Path);
203 return false;
204 }
205
206 basisu::basis_compressor_params comp_params;
207
208 comp_params.m_mip_gen = 0;
209 comp_params.m_pack_uastc_flags = input->m_pack_uastc_flags;
210 comp_params.m_uastc = 1;
211 comp_params.m_rdo_uastc = input->m_rdo_uastc;
212 if (comp_params.m_rdo_uastc)
213 {
214 comp_params.m_rdo_uastc_quality_scalar = input->m_rdo_uastc_quality_scalar;
215 comp_params.m_rdo_uastc_dict_size = input->m_rdo_uastc_dict_size;
216 }
217
218 comp_params.m_source_images.push_back(impl.m_BasisImage);
219
220 dmArray<uint8_t> arr;
221 res = BasisUEncodeInternal(input->m_NumThreads, comp_params, input->m_OutPixelFormat, arr, input->m_Debug);
222
223 // TODO: Avoid extra copies!
224 uint32_t size = arr.Size();
225 uint8_t* compressed = (uint8_t*)malloc(size);
226 memcpy(compressed, arr.Begin(), size);
227
228 *out = compressed;
229 *out_size = size;
230
231 DestroyBasis(&impl);
232
233 return true;
234 }
235}

Callers 3

DoEncodeFunction · 0.85
TEST_PFunction · 0.85

Calls 8

InitBasisUFunction · 0.85
CreateBasisFunction · 0.85
BasisUEncodeInternalFunction · 0.85
mallocFunction · 0.85
DestroyBasisFunction · 0.85
push_backMethod · 0.45
SizeMethod · 0.45
BeginMethod · 0.45

Tested by 1

TEST_PFunction · 0.68