RenderContexts.js 909 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import ChainMap from './ChainMap.js';
  2. import RenderContext from './RenderContext.js';
  3. class RenderContexts {
  4. constructor() {
  5. this.chainMaps = {};
  6. }
  7. get( scene, camera, renderTarget = null ) {
  8. const chainKey = [ scene, camera ];
  9. const attachmentState = renderTarget === null ? 'default' : `${renderTarget.texture.format}:${renderTarget.samples}:${renderTarget.depthBuffer}:${renderTarget.stencilBuffer}`;
  10. const chainMap = this.getChainMap( attachmentState );
  11. let renderState = chainMap.get( chainKey );
  12. if ( renderState === undefined ) {
  13. renderState = new RenderContext();
  14. chainMap.set( chainKey, renderState );
  15. }
  16. return renderState;
  17. }
  18. getChainMap( attachmentState ) {
  19. return this.chainMaps[ attachmentState ] || ( this.chainMaps[ attachmentState ] = new ChainMap() );
  20. }
  21. dispose() {
  22. this.renderStates = new ChainMap();
  23. }
  24. }
  25. export default RenderContexts;