| 2259 | } |
| 2260 | |
| 2261 | void* basis_compress( |
| 2262 | const basisu::vector<image>& source_images, |
| 2263 | uint32_t flags_and_quality, float uastc_rdo_quality, |
| 2264 | size_t* pSize, |
| 2265 | image_stats* pStats) |
| 2266 | { |
| 2267 | // Check input parameters |
| 2268 | if ((!source_images.size()) || (!pSize)) |
| 2269 | { |
| 2270 | error_printf("basis_compress: Invalid parameter\n"); |
| 2271 | assert(0); |
| 2272 | return nullptr; |
| 2273 | } |
| 2274 | |
| 2275 | *pSize = 0; |
| 2276 | |
| 2277 | // Initialize a job pool |
| 2278 | uint32_t num_threads = 1; |
| 2279 | if (flags_and_quality & cFlagThreaded) |
| 2280 | num_threads = basisu::maximum<uint32_t>(1, std::thread::hardware_concurrency()); |
| 2281 | |
| 2282 | job_pool jp(num_threads); |
| 2283 | |
| 2284 | // Initialize the compressor parameter struct |
| 2285 | basis_compressor_params comp_params; |
| 2286 | comp_params.m_pJob_pool = &jp; |
| 2287 | |
| 2288 | comp_params.m_y_flip = (flags_and_quality & cFlagYFlip) != 0; |
| 2289 | comp_params.m_debug = (flags_and_quality & cFlagDebug) != 0; |
| 2290 | |
| 2291 | // Copy the largest mipmap level |
| 2292 | comp_params.m_source_images.resize(1); |
| 2293 | comp_params.m_source_images[0] = source_images[0]; |
| 2294 | |
| 2295 | // Copy the smaller mipmap levels, if any |
| 2296 | if (source_images.size() > 1) |
| 2297 | { |
| 2298 | comp_params.m_source_mipmap_images.resize(1); |
| 2299 | comp_params.m_source_mipmap_images[0].resize(source_images.size() - 1); |
| 2300 | |
| 2301 | for (uint32_t i = 1; i < source_images.size(); i++) |
| 2302 | comp_params.m_source_mipmap_images[0][i - 1] = source_images[i]; |
| 2303 | } |
| 2304 | |
| 2305 | comp_params.m_multithreading = (flags_and_quality & cFlagThreaded) != 0; |
| 2306 | comp_params.m_use_opencl = (flags_and_quality & cFlagUseOpenCL) != 0; |
| 2307 | |
| 2308 | comp_params.m_write_output_basis_files = false; |
| 2309 | |
| 2310 | comp_params.m_perceptual = (flags_and_quality & cFlagSRGB) != 0; |
| 2311 | comp_params.m_mip_srgb = comp_params.m_perceptual; |
| 2312 | comp_params.m_mip_gen = (flags_and_quality & (cFlagGenMipsWrap | cFlagGenMipsClamp)) != 0; |
| 2313 | comp_params.m_mip_wrapping = (flags_and_quality & cFlagGenMipsWrap) != 0; |
| 2314 | |
| 2315 | comp_params.m_uastc = (flags_and_quality & cFlagUASTC) != 0; |
| 2316 | if (comp_params.m_uastc) |
| 2317 | { |
| 2318 | comp_params.m_pack_uastc_flags = flags_and_quality & cPackUASTCLevelMask; |
no test coverage detected