declare const _default: "\n// Required call order: getCenter() first, then getOpacity() for early culling (no extra loads),\n// then getColor() (returns RGB only). getRotation(), getScale() can follow in any order.\nvar<private> cachedTransformA: vec4u;\n\nfn getCenter() -> vec3f {\n    cachedTransformA = loadDataTransformA();\n    return vec3f(bitcast<f32>(cachedTransformA.r), bitcast<f32>(cachedTransformA.g), bitcast<f32>(cachedTransformA.b));\n}\n\nfn getOpacity() -> f32 {\n    return f32(cachedTransformA.a >> 24u) / 255.0;\n}\n\nfn getColor() -> vec3f {\n    let data = loadDataColor().x;\n    let r = f32(data & 0x7FFu) * (4.0 / 2047.0);\n    let g = f32((data >> 11u) & 0x7FFu) * (4.0 / 2047.0);\n    let b = f32((data >> 22u) & 0x3FFu) * (4.0 / 1023.0);\n    return vec3f(r, g, b);\n}\n\nfn getRotation() -> vec4f {\n    let data = loadDataTransformB().x;\n\n    // dequantize half-angle projected quaternion: 11+11+10 bits to [-1, 1]\n    let p = vec3f(\n        f32(data & 0x7FFu) / 2047.0 * 2.0 - 1.0,\n        f32((data >> 11u) & 0x7FFu) / 2047.0 * 2.0 - 1.0,\n        f32((data >> 22u) & 0x3FFu) / 1023.0 * 2.0 - 1.0\n    );\n\n    // inverse half-angle transform, returns (w, x, y, z) format\n    let d = dot(p, p);\n    return vec4f(1.0 - d, sqrt(max(0.0, 2.0 - d)) * p);\n}\n\nfn getScale() -> vec3f {\n    let data = cachedTransformA.a;\n    let sx = f32(data & 0xFFu);\n    let sy = f32((data >> 8u) & 0xFFu);\n    let sz = f32((data >> 16u) & 0xFFu);\n\n    // decode log-encoded scale: 0 = true zero, 1-255 maps linearly in log-space to e^-12..e^9\n    let logRange = 21.0 / 255.0;\n    let logMin = -12.0;\n    return vec3f(\n        select(exp(sx * logRange + logMin), 0.0, sx == 0.0),\n        select(exp(sy * logRange + logMin), 0.0, sy == 0.0),\n        select(exp(sz * logRange + logMin), 0.0, sz == 0.0)\n    );\n}\n";
export default _default;
