UNPKG

@animech-public/playcanvas

Version:
2 lines (1 loc) 1.15 kB
import{semanticToLocation as t,TYPE_INT8 as n,TYPE_UINT8 as e,TYPE_INT16 as s,TYPE_UINT16 as o,TYPE_INT32 as r,TYPE_UINT32 as i,TYPE_FLOAT32 as a,TYPE_FLOAT16 as c}from"../constants.js";const l=[];l[n]="sint8",l[e]="uint8",l[s]="sint16",l[o]="uint16",l[r]="sint32",l[i]="uint32",l[a]="float32",l[c]="float16";const u=[];u[n]="snorm8",u[e]="unorm8",u[s]="snorm16",u[o]="unorm16",u[r]="sint32",u[i]="uint32",u[a]="float32",u[c]="float16";class m{constructor(){this.cache=new Map}get(t,n=null){const e=this.getKey(t,n);let s=this.cache.get(e);return s||(s=this.create(t,n),this.cache.set(e,s)),s}getKey(t,n=null){return`${null==t?void 0:t.renderingHashString}-${null==n?void 0:n.renderingHashString}`}create(n,e){const s=[],o=n=>{const e=n.interleaved,o=n.instancing?"instance":"vertex";let r=[];const i=n.elements.length;for(let a=0;a<i;a++){const c=n.elements[a],m=t[c.name],h=c.normalize?u:l;r.push({shaderLocation:m,offset:e?c.offset:0,format:`${h[c.dataType]}${c.numComponents>1?`x${c.numComponents}`:""}`}),e&&a!==i-1||(s.push({attributes:r,arrayStride:c.stride,stepMode:o}),r=[])}};return n&&o(n),e&&o(e),s}}export{m as WebgpuVertexBufferLayout};