export declare const SdefDeclaration = "\n#ifndef SDEFDECLARATION\n#define SDEFDECLARATION\n\n#if NUM_BONE_INFLUENCERS > 0 && defined(SDEF)\nattribute matricesSdefC: vec3f;\nattribute matricesSdefRW0: vec3f;\nattribute matricesSdefRW1: vec3f;\n\nfn rotationMatrixToQuaternion(matrix: mat3x3f) -> vec4f {\n let trace: f32 = matrix[0][0] + matrix[1][1] + matrix[2][2];\n var s: f32;\n\n var sqrtParam: f32;\n if (trace > 0.0) {\n sqrtParam = trace + 1.0;\n } else if (matrix[0][0] > matrix[1][1] && matrix[0][0] > matrix[2][2]) {\n sqrtParam = 1.0 + matrix[0][0] - matrix[1][1] - matrix[2][2];\n } else if (matrix[1][1] > matrix[2][2]) {\n sqrtParam = 1.0 + matrix[1][1] - matrix[0][0] - matrix[2][2];\n } else {\n sqrtParam = 1.0 + matrix[2][2] - matrix[0][0] - matrix[1][1];\n }\n let sqrtValue: f32 = sqrt(sqrtParam);\n\n if (trace > 0.0) {\n s = 0.5 / sqrtValue;\n\n return vec4f(\n (matrix[1][2] - matrix[2][1]) * s,\n (matrix[2][0] - matrix[0][2]) * s,\n (matrix[0][1] - matrix[1][0]) * s,\n 0.25 / s\n );\n } else if (matrix[0][0] > matrix[1][1] && matrix[0][0] > matrix[2][2]) {\n s = 2.0 * sqrtValue;\n\n return vec4f(\n 0.25 * s,\n (matrix[0][1] + matrix[1][0]) / s,\n (matrix[2][0] + matrix[0][2]) / s,\n (matrix[1][2] - matrix[2][1]) / s\n );\n } else if (matrix[1][1] > matrix[2][2]) {\n s = 2.0 * sqrtValue;\n \n return vec4f(\n (matrix[0][1] + matrix[1][0]) / s,\n 0.25 * s,\n (matrix[1][2] + matrix[2][1]) / s,\n (matrix[2][0] - matrix[0][2]) / s\n );\n } else {\n s = 2.0 * sqrtValue;\n\n return vec4f(\n (matrix[2][0] + matrix[0][2]) / s,\n (matrix[1][2] + matrix[2][1]) / s,\n 0.25 * s,\n (matrix[0][1] - matrix[1][0]) / s\n );\n }\n}\n\nfn quaternionToRotationMatrix(q: vec4f) -> mat3x3f {\n let xx: f32 = q.x * q.x;\n let yy: f32 = q.y * q.y;\n let zz: f32 = q.z * q.z;\n let xy: f32 = q.x * q.y;\n let zw: f32 = q.z * q.w;\n let zx: f32 = q.z * q.x;\n let yw: f32 = q.y * q.w;\n let yz: f32 = q.y * q.z;\n let xw: f32 = q.x * q.w;\n\n return mat3x3f(\n 1.0 - 2.0 * (yy + zz), 2.0 * (xy + zw), 2.0 * (zx - yw),\n 2.0 * (xy - zw), 1.0 - 2.0 * (zz + xx), 2.0 * (yz + xw),\n 2.0 * (zx + yw), 2.0 * (yz - xw), 1.0 - 2.0 * (yy + xx)\n );\n}\n\nfn slerp(q0: vec4f, _q1: vec4f, t: f32) -> vec4f {\n var q1: vec4f = _q1;\n\n var cosTheta: f32 = dot(q0, q1);\n\n // if (cosTheta < 0.0) {\n // q1 = -q1;\n // cosTheta = -cosTheta;\n // }\n q1 = mix(-q1, q1, step(0.0, cosTheta));\n cosTheta = abs(cosTheta);\n \n if (cosTheta > 0.999999) {\n return normalize(mix(q0, q1, t));\n }\n\n var theta: f32 = acos(cosTheta);\n var sinTheta: f32 = sin(theta);\n\n var w0: f32 = sin((1.0 - t) * theta) / sinTheta;\n var w1: f32 = sin(t * theta) / sinTheta;\n\n return q0 * w0 + q1 * w1;\n}\n#endif\n\n#endif\n";