@animech-public/playcanvas
Version:
PlayCanvas WebGL game engine
2 lines (1 loc) • 1.16 kB
JavaScript
import{SHADER_DEPTH as e,SHADER_PICK as s,SHADER_FORWARD as t,SHADER_FORWARDHDR as i}from"./constants.js";import{DeviceCache as n}from"../platform/graphics/device-cache.js";const a=new n;class d{constructor(e,s,t={}){this.index=void 0,this.name=void 0,this.shaderDefines=void 0,this.name=e,this.index=s,Object.assign(this,t),this.shaderDefines=this.buildShaderDefines()}buildShaderDefines(){let t;this.isShadow?t="SHADOW":this.isForward?t="FORWARD":this.index===e?t="DEPTH":this.index===s&&(t="PICK");return(t?`#define ${t}_PASS\n`:"")+`#define ${this.name.toUpperCase()}_PASS\n`}}class r{constructor(){this.passesNamed=new Map,this.passesIndexed=[],this.nextIndex=0;const e=(e,s,t)=>{this.allocate(e,t)};e("forward",0,{isForward:!0}),e("forward_hdr",0,{isForward:!0}),e("depth"),e("pick"),e("shadow"),e("prepass")}static get(e){return a.get(e,(()=>new r))}allocate(e,s){let t=this.passesNamed.get(e);return void 0===t&&(t=new d(e,this.nextIndex,s),this.passesNamed.set(t.name,t),this.passesIndexed[t.index]=t,this.nextIndex++),t}getByIndex(e){return this.passesIndexed[e]}getByName(e){return this.passesNamed.get(e)}}export{r as ShaderPass,d as ShaderPassInfo};