mirror of
https://github.com/BinomialLLC/basis_universal.git
synced 2026-06-08 00:23:52 +00:00
64 lines
1.4 KiB
Python
64 lines
1.4 KiB
Python
# 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)
|