UNPKG

playcanvas

Version:

PlayCanvas WebGL game engine

36 lines (34 loc) 1.13 kB
var particleOutputRgba8PS = ` uniform vec3 outBoundsMul; uniform vec3 outBoundsAdd; vec2 encodeFloatRG( float v ) { vec2 enc = vec2(1.0, 255.0) * v; enc = fract(enc); enc -= enc.yy * vec2(1.0/255.0, 1.0/255.0); return enc; } vec4 encodeFloatRGBA( float v ) { vec4 enc = vec4(1.0, 255.0, 65025.0, 160581375.0) * v; enc = fract(enc); enc -= enc.yzww * vec4(1.0/255.0,1.0/255.0,1.0/255.0,0.0); return enc; } void writeOutput() { outPos = outPos * outBoundsMul + outBoundsAdd; outAngle = fract(outAngle / PI2); outVel = (outVel / maxVel) + vec3(0.5); float maxNegLife = max(lifetime, (numParticles - 1.0) * (rate+rateDiv)); float maxPosLife = lifetime+1.0; outLife = (outLife + maxNegLife) / (maxNegLife + maxPosLife); if (gl_FragCoord.y < 1.0) { gl_FragColor = vec4(encodeFloatRG(outPos.x), encodeFloatRG(outPos.y)); } else if (gl_FragCoord.y < 2.0) { gl_FragColor = vec4(encodeFloatRG(outPos.z), encodeFloatRG(outAngle)); } else if (gl_FragCoord.y < 3.0) { gl_FragColor = vec4(outVel, visMode*0.5+0.5); } else { gl_FragColor = encodeFloatRGBA(outLife); } } `; export { particleOutputRgba8PS as default };