@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) • 1.86 kB
JavaScript
import{o as e}from"./index-B8IgtevW.esm.min.js";const t=0;let r=null,i=null,o=null;function u(u,n,a,c){const l=u._device,s=function(e){return e!==r&&(r=e,i=e.createShaderModule({code:"@id(0)override f:bool=false;@group(0)@binding(0)var t:texture_2d<f32>;@group(0)@binding(1)var o:texture_storage_2d<rgba16float,write>;@compute @workgroup_size(8,8)fn main(@builtin(global_invocation_id)g:vec3u){let d=textureDimensions(t);if(any(g.xy>=d)){return;}let c=textureLoad(t,vec2u(g.x,select(g.y,d.y-1u-g.y,f)),0);textureStore(o,g.xy,vec4f(pow(c.rgb,vec3f(2.2))/max(c.a,1.0/255.0),1));}"}),o=null),o||(o=e.createComputePipeline({layout:"auto",compute:{module:i,entryPoint:"main",constants:{[t]:1}}}),o)}(l),d=l.createTexture({size:{width:a,height:a,depthOrArrayLayers:6},format:"rgba16float",mipLevelCount:c,usage:e.TEXTURE_BINDING|e.COPY_DST|e.COPY_SRC|e.RENDER_ATTACHMENT,dimension:"2d"});for(let t=0;t<c;t++){const r=Math.max(1,a>>t),i=l.createTexture({size:{width:r,height:r},format:"rgba8unorm",usage:e.TEXTURE_BINDING|e.COPY_DST|e.RENDER_ATTACHMENT}),o=l.createTexture({size:{width:r,height:r},format:"rgba16float",usage:e.STORAGE_BINDING|e.COPY_SRC}),u=l.createBindGroup({layout:s.getBindGroupLayout(0),entries:[{binding:0,resource:i.createView()},{binding:1,resource:o.createView()}]});for(let e=0;e<6;e++){const a=6*t+e;if(a>=n.length)break;l.queue.copyExternalImageToTexture({source:n[a],flipY:!1},{texture:i,premultipliedAlpha:!1},{width:r,height:r});const c=l.createCommandEncoder(),g=c.beginComputePass();g.setPipeline(s),g.setBindGroup(0,u),g.dispatchWorkgroups(Math.ceil(r/8),Math.ceil(r/8)),g.end(),c.copyTextureToTexture({texture:o},{texture:d,origin:{x:0,y:0,z:e},mipLevel:t},{width:r,height:r}),l.queue.submit([c.finish()])}i.destroy(),o.destroy()}return d}export{u as uploadCubemapRGBD};
//# sourceMappingURL=ibl-cubemap-upload-BHU0qZSO.esm.min.js.map