| # compress_test.py |
| from .basisu_wasm import * |
| |
| # === Load WASM === |
| codec = BasisuWasm("basisu_py/wasm/basisu_module_st.wasm") |
| codec.load() |
| |
| print("Version =", codec.version()) |
| |
| # === Build test image === |
| W, H = 256, 256 |
| BYTES_PER_PIXEL = 4 |
| pitch = W * BYTES_PER_PIXEL |
| |
| img = bytearray(W * H * 4) |
| |
| for y in range(H): |
| for x in range(W): |
| i = (y * W + x) * 4 |
| img[i + 0] = x & 0xFF # R |
| img[i + 1] = y & 0xFF # G |
| img[i + 2] = (x ^ y) & 0xFF # B |
| img[i + 3] = 255 # A |
| |
| # === Upload image to WASM memory === |
| img_ptr = codec.alloc(len(img)) |
| codec.write_bytes(img_ptr, img) |
| |
| # === Create comp_params === |
| params = codec.new_params() |
| |
| # === Set image into comp_params === |
| ok = codec.set_image_rgba32(params, 0, img_ptr, W, H, pitch) |
| print("Set image:", ok) |
| |
| # === Compress === |
| ok = codec.compress( |
| params, |
| tex_format=BasisTexFormat.cUASTC_LDR_4x4, |
| quality=100, |
| effort=BasisEffort.DEFAULT, |
| flags=BasisFlags.KTX2_OUTPUT | BasisFlags.SRGB, |
| rdo_quality=0.0 |
| ) |
| print("Compress result:", ok) |
| |
| # === Retrieve compressed blob === |
| ofs = codec.get_comp_data_ofs(params) |
| size = codec.get_comp_data_size(params) |
| print("Output size =", size) |
| |
| comp_data = codec.read_bytes(ofs, size) |
| print("First 16 bytes:", comp_data[:16]) |
| |
| # === Save to KTX2 === |
| with open("test.ktx2", "wb") as f: |
| f.write(comp_data) |
| |
| print("File written: test.ktx2") |
| |
| # === Cleanup === |
| codec.delete_params(params) |
| codec.free(img_ptr) |