@babylonjs/viewer
Version:
The Babylon Viewer aims to simplify a specific but common Babylon.js use case: loading, viewing, and interacting with a 3D model.
3 lines (2 loc) • 2.71 kB
JavaScript
import{B as r,F as e,ag as u,r as t,aR as o,ap as f}from"./index-B8IgtevW.esm.min.js";function n(f,n,a){const c=f._device,s=n._gpuCullingEnabled;let _=null,i=null,l=!1;if(n._version!==n._gpuVersion||n._gpuBufferStorage!==s){const t=64*n.count;let o=!1;(!n._gpuBuffer||n._gpuBuffer.size<t||n._gpuBufferStorage!==s)&&(n._gpuBuffer&&(_=n._gpuBuffer),n._gpuBuffer=c.createBuffer({label:"thin-instance-matrices",size:Math.max(64*n._capacity,4),usage:r.VERTEX|r.COPY_DST|r.STORAGE}),n._gpuBufferStorage=s,o=!0,l=!0);const f=o?0:n._dirtyMin,a=o?n.count:Math.min(n._dirtyMax,n.count);if(a>f){const r=64*f,t=64*a;if(n.matrices instanceof e)c.queue.writeBuffer(n._gpuBuffer,r,n.matrices.buffer,n.matrices.byteOffset+r,t-r);else{const o=16*n._capacity;(!n._uploadF32||n._uploadF32.length<o)&&(n._uploadF32=new e(o));const s=n._uploadF32;for(let r=f;r<a;r++)u(s,n.matrices,16*r,16*r);c.queue.writeBuffer(n._gpuBuffer,r,s.buffer,s.byteOffset+r,t-r)}}n._dirtyMin=n.count,n._dirtyMax=0,n._gpuVersion=n._version}if(a&&n.colors&&(n._colorVersion!==n._colorGpuVersion||n._colorGpuBufferStorage!==s)){const e=16*n.count;let u=!1;(!n._colorGpuBuffer||n._colorGpuBuffer.size<e||n._colorGpuBufferStorage!==s)&&(n._colorGpuBuffer&&(i=n._colorGpuBuffer),n._colorGpuBuffer=c.createBuffer({label:"thin-instance-colors",size:Math.max(16*n._capacity,4),usage:r.VERTEX|r.COPY_DST|(s?r.STORAGE:0)}),n._colorGpuBufferStorage=s,u=!0,l=!0);const t=u?0:n._colorDirtyMin,o=u?n.count:Math.min(n._colorDirtyMax,n.count);o>t&&c.queue.writeBuffer(n._colorGpuBuffer,16*t,n.colors.buffer,n.colors.byteOffset+16*t,16*(o-t)),n._colorDirtyMin=n.count,n._colorDirtyMax=0,n._colorGpuVersion=n._colorVersion}return(_||i)&&t(f,()=>{_?.destroy(),i?.destroy()}),l&&o(),l}function a(e,u,t){if(u._drawArgsBuffer||(u._drawArgsBuffer=e._device.createBuffer({size:20,usage:r.INDIRECT|r.COPY_DST}),u._drawArgsData=new f(5),u._drawArgsIndexCount=-1,u._drawArgsInstanceCount=-1,o()),u._drawArgsIndexCount!==t||u._drawArgsInstanceCount!==u.count){const r=u._drawArgsData;r[0]=t,r[1]=u.count,r[2]=0,r[3]=0,r[4]=0,e._device.queue.writeBuffer(u._drawArgsBuffer,0,r.buffer,r.byteOffset,r.byteLength),u._drawArgsIndexCount=t,u._drawArgsInstanceCount=u.count}return u._drawArgsBuffer}function c(r,e,u,t){return n(r,e,u),e._drawArgsBuffer||(e._drawArgsInstanceCount??=e.count)!==e.count?a(r,e,t):null}function s(r,e,u,t,o,f){n(r,e,o);const a=f?.matrixBuffer??e._gpuBuffer;if(a&&u.setVertexBuffer(t++,a),o){const r=f?.colorBuffer??e._colorGpuBuffer;r&&u.setVertexBuffer(t++,r)}return t}export{s as syncThinInstanceBuffers,a as syncThinInstanceDrawArgs,c as syncThinInstanceForDraw,n as syncThinInstanceGpuData};
//# sourceMappingURL=thin-instance-gpu-GPo-3kJo.esm.min.js.map