UNPKG

@animech-public/playcanvas

Version:
2 lines (1 loc) 1.15 kB
import{BlendState as e}from"../../platform/graphics/blend-state.js";import{RenderPass as r}from"../../platform/graphics/render-pass.js";import{SHADER_PICK as s}from"../../scene/constants.js";const t=[],a=[[],[],[]];class n extends r{constructor(e,r){super(e),this.pickColor=new Float32Array(4),this.renderer=r}update(e,r,s,t){this.camera=e,this.scene=r,this.layers=s,this.mapping=t}execute(){const r=this.device,{renderer:n,camera:c,scene:o,layers:i,mapping:l,renderTarget:p}=this,m=o.layers.layerList,h=o.layers.subLayerEnabled,d=o.layers.subLayerList,f=r.scope.resolve("uColor"),u=this.pickColor;for(let o=0;o<m.length;o++){const g=m[o];if(!(i&&i.indexOf(g)<0)&&(g.enabled&&h[o]&&g.camerasSet.has(c.camera))){const i=d[o];g._clearDepthBuffer&&n.clear(c.camera,!1,!0,!1);const m=g.meshInstances;for(let e=0;e<m.length;e++){const r=m[e];r.pick&&r.transparent===i&&(t.push(r),l.set(r.id,r))}t.length>0&&(n.setCameraUniforms(c.camera,p),n.renderForward(c.camera,t,a,s,(s=>{const t=s.id;u[0]=(t>>16&255)/255,u[1]=(t>>8&255)/255,u[2]=(255&t)/255,u[3]=(t>>24&255)/255,f.setValue(u),r.setBlendState(e.NOBLEND)})),t.length=0)}}}}export{n as RenderPassPicker};