UNPKG

playcanvas

Version:

Open-source WebGL/WebGPU 3D engine for the web

3 lines (2 loc) 1.42 kB
declare const _default: "\n#if SH_BANDS > 0\nvar packedShN: texture_2d<f32>;\n\nuniform shN_mins: f32;\nuniform shN_maxs: f32;\n\nfn readSHTexel(u: i32, v: i32) -> half3 {\n return mix(half3(half(uniform.shN_mins)), half3(half(uniform.shN_maxs)), half3(unpack111110(pack8888(textureLoad(packedShN, vec2i(u, v), 0)))));\n}\n\nfn readSHData(sh: ptr<function, array<half3, SH_COEFFS>>, scale: ptr<function, f32>) {\n // extract spherical harmonics palette index\n let t = vec2i(packedSample.xy & vec2u(255u));\n let n = t.x + t.y * 256;\n let u = (n % 64) * SH_COEFFS;\n let v = n / 64;\n\n // read consecutive texels (unrolled to avoid Dawn's forward progress volatile wrapper)\n sh[0] = readSHTexel(u, v);\n sh[1] = readSHTexel(u + 1, v);\n sh[2] = readSHTexel(u + 2, v);\n #if SH_BANDS > 1\n sh[3] = readSHTexel(u + 3, v);\n sh[4] = readSHTexel(u + 4, v);\n sh[5] = readSHTexel(u + 5, v);\n sh[6] = readSHTexel(u + 6, v);\n sh[7] = readSHTexel(u + 7, v);\n #endif\n #if SH_BANDS > 2\n sh[8] = readSHTexel(u + 8, v);\n sh[9] = readSHTexel(u + 9, v);\n sh[10] = readSHTexel(u + 10, v);\n sh[11] = readSHTexel(u + 11, v);\n sh[12] = readSHTexel(u + 12, v);\n sh[13] = readSHTexel(u + 13, v);\n sh[14] = readSHTexel(u + 14, v);\n #endif\n\n *scale = 1.0;\n}\n#endif\n"; export default _default;