RenderContexts.js 1007 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  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. if ( renderTarget !== null ) renderState.sampleCount = renderTarget.samples === 0 ? 1 : renderTarget.samples;
  17. return renderState;
  18. }
  19. getChainMap( attachmentState ) {
  20. return this.chainMaps[ attachmentState ] || ( this.chainMaps[ attachmentState ] = new ChainMap() );
  21. }
  22. dispose() {
  23. this.chainMaps = {};
  24. }
  25. }
  26. export default RenderContexts;