最新代码
This commit is contained in:
63
public/sdk/three/jsm/renderers/common/RenderContexts.js
Normal file
63
public/sdk/three/jsm/renderers/common/RenderContexts.js
Normal file
@ -0,0 +1,63 @@
|
||||
import ChainMap from './ChainMap.js';
|
||||
import RenderContext from './RenderContext.js';
|
||||
|
||||
class RenderContexts {
|
||||
|
||||
constructor() {
|
||||
|
||||
this.chainMaps = {};
|
||||
|
||||
}
|
||||
|
||||
get( scene, camera, renderTarget = null ) {
|
||||
|
||||
const chainKey = [ scene, camera ];
|
||||
|
||||
let attachmentState;
|
||||
|
||||
if ( renderTarget === null ) {
|
||||
|
||||
attachmentState = 'default';
|
||||
|
||||
} else {
|
||||
|
||||
const format = renderTarget.texture.format;
|
||||
const count = renderTarget.count;
|
||||
|
||||
attachmentState = `${ count }:${ format }:${ renderTarget.samples }:${ renderTarget.depthBuffer }:${ renderTarget.stencilBuffer }`;
|
||||
|
||||
}
|
||||
|
||||
const chainMap = this.getChainMap( attachmentState );
|
||||
|
||||
let renderState = chainMap.get( chainKey );
|
||||
|
||||
if ( renderState === undefined ) {
|
||||
|
||||
renderState = new RenderContext();
|
||||
|
||||
chainMap.set( chainKey, renderState );
|
||||
|
||||
}
|
||||
|
||||
if ( renderTarget !== null ) renderState.sampleCount = renderTarget.samples === 0 ? 1 : renderTarget.samples;
|
||||
|
||||
return renderState;
|
||||
|
||||
}
|
||||
|
||||
getChainMap( attachmentState ) {
|
||||
|
||||
return this.chainMaps[ attachmentState ] || ( this.chainMaps[ attachmentState ] = new ChainMap() );
|
||||
|
||||
}
|
||||
|
||||
dispose() {
|
||||
|
||||
this.chainMaps = {};
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default RenderContexts;
|
Reference in New Issue
Block a user