@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.84 kB
JavaScript
import{i as e}from"./index-DFZFpUG-.esm.min.js";let t=null,r=null,i=null;function o(o,u,n,a){const c=o._device,l=function(e){return e!==t&&(t=e,r=e.createShaderModule({code:"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));}"}),i=null),i||(i=e.createComputePipeline({layout:"auto",compute:{module:r,entryPoint:"main",constants:{f:1}}}),i)}(c),s=c.createTexture({size:{width:n,height:n,depthOrArrayLayers:6},format:"rgba16float",mipLevelCount:a,usage:e.TEXTURE_BINDING|e.COPY_DST|e.COPY_SRC|e.RENDER_ATTACHMENT,dimension:"2d"});for(let t=0;t<a;t++){const r=Math.max(1,n>>t),i=c.createTexture({size:{width:r,height:r},format:"rgba8unorm",usage:e.TEXTURE_BINDING|e.COPY_DST|e.RENDER_ATTACHMENT}),o=c.createTexture({size:{width:r,height:r},format:"rgba16float",usage:e.STORAGE_BINDING|e.COPY_SRC}),a=c.createBindGroup({layout:l.getBindGroupLayout(0),entries:[{binding:0,resource:i.createView()},{binding:1,resource:o.createView()}]});for(let e=0;e<6;e++){const n=6*t+e;if(n>=u.length)break;c.queue.copyExternalImageToTexture({source:u[n],flipY:!1},{texture:i,premultipliedAlpha:!1},{width:r,height:r});const d=c.createCommandEncoder(),g=d.beginComputePass();g.setPipeline(l),g.setBindGroup(0,a),g.dispatchWorkgroups(Math.ceil(r/8),Math.ceil(r/8)),g.end(),d.copyTextureToTexture({texture:o},{texture:s,origin:{x:0,y:0,z:e},mipLevel:t},{width:r,height:r}),c.queue.submit([d.finish()])}i.destroy(),o.destroy()}return s}export{o as uploadCubemapRGBD};
//# sourceMappingURL=ibl-cubemap-upload-QZ7gVQ_d.esm.min.js.map