playcanvas
Version:
Open-source WebGL/WebGPU 3D engine for the web
3 lines (2 loc) • 1.52 kB
TypeScript
declare const _default: "\n// Required call order: getCenter() first, then getOpacity() (loads and caches color),\n// then getColor() (returns cached RGB). getRotation(), getScale() can follow in any order.\nvar<private> cachedTransformA: vec4u;\nvar<private> cachedTransformB: vec2u;\nvar<private> cachedColor: vec4f;\n\nfn getCenter() -> vec3f {\n cachedTransformA = loadDataTransformA();\n cachedTransformB = loadDataTransformB().xy;\n return vec3f(bitcast<f32>(cachedTransformA.r), bitcast<f32>(cachedTransformA.g), bitcast<f32>(cachedTransformA.b));\n}\n\nfn getOpacity() -> f32 {\n #ifdef GSPLAT_COLOR_FLOAT\n cachedColor = loadDataColor();\n #else\n let packedColor = loadDataColor();\n let packed_rg = packedColor.r | (packedColor.g << 16u);\n let packed_ba = packedColor.b | (packedColor.a << 16u);\n cachedColor = vec4f(unpack2x16float(packed_rg), unpack2x16float(packed_ba));\n #endif\n return cachedColor.a;\n}\n\nfn getColor() -> vec3f {\n return cachedColor.rgb;\n}\n\nfn getRotation() -> vec4f {\n let rotXY = unpack2x16float(cachedTransformA.a);\n let rotZscaleX = unpack2x16float(cachedTransformB.x);\n let rotXYZ = vec3f(rotXY, rotZscaleX.x);\n return vec4f(rotXYZ, sqrt(max(0.0, 1.0 - dot(rotXYZ, rotXYZ)))).wxyz;\n}\n\nfn getScale() -> vec3f {\n let rotZscaleX = unpack2x16float(cachedTransformB.x);\n let scaleYZ = unpack2x16float(cachedTransformB.y);\n return vec3f(rotZscaleX.y, scaleYZ);\n}\n";
export default _default;