UNPKG

@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
import{B as r,F as e,a9 as u,r as o,aH as t,ai as f}from"./index-DFZFpUG-.esm.min.js";function n(f,n,c){const s=f._device,a=n._gpuCullingEnabled,_=[];let i=!1;if(n._version!==n._gpuVersion||n._gpuBufferStorage!==a){const o=64*n.count;let t=!1;(!n._gpuBuffer||n._gpuBuffer.size<o||n._gpuBufferStorage!==a)&&(n._gpuBuffer&&_.push(n._gpuBuffer),n._gpuBuffer=s.createBuffer({label:"thin-instance-matrices",size:Math.max(64*n._capacity,4),usage:r.VERTEX|r.COPY_DST|r.STORAGE}),n._gpuBufferStorage=a,t=!0,i=!0);const f=t?0:n._dirtyMin,c=t?n.count:Math.min(n._dirtyMax,n.count);if(c>f){const r=64*f,o=64*c;if(n.matrices instanceof e)s.queue.writeBuffer(n._gpuBuffer,r,n.matrices.buffer,n.matrices.byteOffset+r,o-r);else{const t=16*n._capacity;(!n._uploadF32||n._uploadF32.length<t)&&(n._uploadF32=new e(t));const a=n._uploadF32;for(let r=f;r<c;r++)u(a,n.matrices,16*r,16*r);s.queue.writeBuffer(n._gpuBuffer,r,a.buffer,a.byteOffset+r,o-r)}}n._dirtyMin=n.count,n._dirtyMax=0,n._gpuVersion=n._version}if(c&&n.colors&&(n._colorVersion!==n._colorGpuVersion||n._colorGpuBufferStorage!==a)){const e=16*n.count;let u=!1;(!n._colorGpuBuffer||n._colorGpuBuffer.size<e||n._colorGpuBufferStorage!==a)&&(n._colorGpuBuffer&&_.push(n._colorGpuBuffer),n._colorGpuBuffer=s.createBuffer({label:"thin-instance-colors",size:Math.max(16*n._capacity,4),usage:r.VERTEX|r.COPY_DST|(a?r.STORAGE:0)}),n._colorGpuBufferStorage=a,u=!0,i=!0);const o=u?0:n._colorDirtyMin,t=u?n.count:Math.min(n._colorDirtyMax,n.count);t>o&&s.queue.writeBuffer(n._colorGpuBuffer,16*o,n.colors.buffer,n.colors.byteOffset+16*o,16*(t-o)),n._colorDirtyMin=n.count,n._colorDirtyMax=0,n._colorGpuVersion=n._colorVersion}return _.length>0&&o(f,()=>{for(const r of _)r.destroy()}),i&&t(),i}function c(e,u,o){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,t()),u._drawArgsIndexCount!==o||u._drawArgsInstanceCount!==u.count){const r=u._drawArgsData;r[0]=o,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=o,u._drawArgsInstanceCount=u.count}return u._drawArgsBuffer}function s(r,e,u,o){return n(r,e,u),e._drawArgsBuffer||(e._drawArgsInstanceCount??=e.count)!==e.count?c(r,e,o):null}function a(r,e,u,o,t,f){n(r,e,t);const c=f?.matrixBuffer??e._gpuBuffer;if(c&&u.setVertexBuffer(o++,c),t){const r=f?.colorBuffer??e._colorGpuBuffer;r&&u.setVertexBuffer(o++,r)}return o}export{a as syncThinInstanceBuffers,c as syncThinInstanceDrawArgs,s as syncThinInstanceForDraw,n as syncThinInstanceGpuData}; //# sourceMappingURL=thin-instance-gpu-bFS2p2by.esm.min.js.map