/** * 파티클 및 텍스처 Instanced 렌더링 쉐이더 * Renderer.ts에서 자동 배칭(Auto-Batching)에 사용됩니다. */ export declare const instancedVertex = "\n attribute vec2 position;\n attribute vec2 uv;\n\n // instanced attributes (4x4 Model Matrix split into 4 vec4s)\n attribute vec4 instanceMat0;\n attribute vec4 instanceMat1;\n attribute vec4 instanceMat2;\n attribute vec4 instanceMat3;\n \n // x: opacity, y: flipY\n attribute vec2 instanceOpacityFlip;\n \n // x: uvOffsetX, y: uvOffsetY, z: uvScaleX, w: uvScaleY\n attribute vec4 instanceUVParams;\n \n // x: TR, y: BR, z: TL, w: BL\n attribute vec4 instanceBorderRadius;\n\n uniform mat4 uViewMatrix;\n uniform mat4 uProjectionMatrix;\n\n varying vec2 vUV;\n varying float vOpacity;\n varying vec2 vSize;\n varying vec4 vBorderRadius;\n varying vec2 vLocalUV;\n\n void main() {\n float flipY = instanceOpacityFlip.y;\n vec2 finalUV = uv;\n if (flipY > 0.0) {\n finalUV.y = 1.0 - finalUV.y;\n }\n \n // UV Offset & Scale\n vUV = finalUV * instanceUVParams.zw + instanceUVParams.xy;\n vLocalUV = uv;\n vOpacity = instanceOpacityFlip.x;\n vBorderRadius = instanceBorderRadius;\n \n float w = length(instanceMat0.xyz);\n float h = length(instanceMat1.xyz);\n vSize = vec2(w, h);\n \n mat4 modelMat = mat4(\n instanceMat0,\n instanceMat1,\n instanceMat2,\n instanceMat3\n );\n\n vec4 worldPos = modelMat * vec4(position, 0.0, 1.0);\n gl_Position = uProjectionMatrix * uViewMatrix * worldPos;\n }\n"; export declare const instancedFragment = "\n precision highp float;\n uniform sampler2D uTexture;\n varying vec2 vUV;\n varying float vOpacity;\n varying vec2 vSize;\n varying vec4 vBorderRadius;\n varying vec2 vLocalUV;\n\n float sdRoundedBox(vec2 p, vec2 b, vec4 r) {\n r.xy = (p.x > 0.0) ? r.xy : r.zw;\n r.x = (p.y > 0.0) ? r.x : r.y;\n vec2 q = abs(p) - b + r.x;\n return min(max(q.x, q.y), 0.0) + length(max(q, 0.0)) - r.x;\n }\n\n void main() {\n float maxRad = max(max(vBorderRadius.x, vBorderRadius.y), max(vBorderRadius.z, vBorderRadius.w));\n if (maxRad > 0.0) {\n vec2 p = (vLocalUV - 0.5) * vSize;\n float d = sdRoundedBox(p, vSize * 0.5, vBorderRadius);\n if (d > 0.0) discard;\n }\n\n vec4 color = texture2D(uTexture, vUV);\n gl_FragColor = vec4(color.rgb * vOpacity, color.a * vOpacity);\n }\n";