UNPKG

@animech-public/playcanvas

Version:
2 lines (1 loc) 836 B
import{math as t}from"./math.js";const a=1/255,o=new Float32Array(1),n=new Int32Array(o.buffer);class s{static float2Half(t){o[0]=t;const a=n[0];let s=a>>16&32768,r=a>>12&2047;const c=a>>23&255;return c<103?s:c>142?(s|=31744,s|=(255===c?0:1)&&8388607&a,s):c<113?(r|=2048,s|=(r>>114-c)+(r>>113-c&1),s):(s|=c-112<<10|r>>1,s+=1&r,s)}static float2Bytes(t,o,n,s){const r=255*t%1;if(o[n+0]=Math.round(255*(t%1-a*r)),s>1){const c=65025*t%1;if(o[n+1]=Math.round(255*(r-a*c)),s>2){const r=16581375*t%1;o[n+2]=Math.round(255*(c-a*r)),s>3&&(o[n+3]=Math.round(255*r))}}}static float2BytesRange(a,o,n,r,c,e){a=t.clamp((a-r)/(c-r),0,1),s.float2Bytes(a,o,n,e)}static float2MantissaExponent(t,a,o,n){const r=Math.floor(Math.log2(Math.abs(t)))+1;t/=Math.pow(2,r),s.float2BytesRange(t,a,o,-1,1,n-1),a[o+n-1]=Math.round(r+127)}}export{s as FloatPacking};