playcanvas
Version:
Open-source WebGL/WebGPU 3D engine for the web
3 lines (2 loc) • 1.46 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.\nuvec4 cachedTransformA;\nuvec2 cachedTransformB;\nvec4 cachedColor;\n\nvec3 getCenter() {\n cachedTransformA = loadDataTransformA();\n cachedTransformB = loadDataTransformB().xy;\n return vec3(uintBitsToFloat(cachedTransformA.r), uintBitsToFloat(cachedTransformA.g), uintBitsToFloat(cachedTransformA.b));\n}\n\nfloat getOpacity() {\n #ifdef GSPLAT_COLOR_FLOAT\n cachedColor = loadDataColor();\n #else\n uvec4 packedColor = loadDataColor();\n uint packed_rg = packedColor.r | (packedColor.g << 16u);\n uint packed_ba = packedColor.b | (packedColor.a << 16u);\n cachedColor = vec4(unpackHalf2x16(packed_rg), unpackHalf2x16(packed_ba));\n #endif\n return cachedColor.a;\n}\n\nvec3 getColor() {\n return cachedColor.rgb;\n}\n\nvec4 getRotation() {\n vec2 rotXY = unpackHalf2x16(cachedTransformA.a);\n vec2 rotZscaleX = unpackHalf2x16(cachedTransformB.x);\n vec3 rotXYZ = vec3(rotXY, rotZscaleX.x);\n return vec4(rotXYZ, sqrt(max(0.0, 1.0 - dot(rotXYZ, rotXYZ)))).wxyz;\n}\n\nvec3 getScale() {\n vec2 rotZscaleX = unpackHalf2x16(cachedTransformB.x);\n vec2 scaleYZ = unpackHalf2x16(cachedTransformB.y);\n return vec3(rotZscaleX.y, scaleYZ);\n}\n";
export default _default;