export const computeGsplatProjectCommonSource: "\n\nstruct ProjectedSplatCommon {\n    valid: bool,\n    splatId: u32,\n    center: vec3f,\n    opacity: f32,\n    proj: SplatCov2D\n}\n\nfn invalidProjectedSplatCommon() -> ProjectedSplatCommon {\n    var cov: SplatCov2D;\n    cov.screen = vec2f(0.0);\n    cov.a = 0.0;\n    cov.b = 0.0;\n    cov.c = 0.0;\n    cov.viewDepth = 0.0;\n    cov.valid = false;\n\n    return ProjectedSplatCommon(false, 0u, vec3f(0.0), 0.0, cov);\n}\n\nfn projectSplatCommon(\n    threadIdx: u32,\n    numVisible: u32,\n    alphaClip: f32,\n    minPixelSize: f32,\n    minContribution: f32,\n    viewMatrix: mat4x4f,\n    viewProj: mat4x4f,\n    focal: f32,\n    viewportWidth: f32,\n    viewportHeight: f32,\n    nearClip: f32,\n    farClip: f32,\n    isOrtho: u32,\n    #ifdef GSPLAT_FISHEYE\n        fisheye_k: f32,\n        fisheye_inv_k: f32,\n        fisheye_projMat00: f32,\n        fisheye_projMat11: f32,\n    #endif\n) -> ProjectedSplatCommon {\n    if (threadIdx >= numVisible) {\n        return invalidProjectedSplatCommon();\n    }\n\n    let splatId = compactedSplatIds[threadIdx];\n    setSplat(splatId);\n\n    let center = getCenter();\n    let opacity = getOpacity();\n    if (opacity <= alphaClip) {\n        return invalidProjectedSplatCommon();\n    }\n\n    let rotation = half4(getRotation());\n    let scale = half3(getScale());\n\n    let proj = computeSplatCov(\n        center, rotation, scale,\n        viewMatrix, viewProj,\n        focal, viewportWidth, viewportHeight,\n        nearClip, farClip, opacity, minPixelSize,\n        isOrtho, alphaClip, minContribution,\n        #ifdef GSPLAT_FISHEYE\n            fisheye_k, fisheye_inv_k,\n            fisheye_projMat00, fisheye_projMat11,\n        #endif\n    );\n\n    if (!proj.valid) {\n        return invalidProjectedSplatCommon();\n    }\n\n    return ProjectedSplatCommon(true, splatId, center, opacity, proj);\n}\n";
export default computeGsplatProjectCommonSource;
