196 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			196 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
let vector2 = null;
 | 
						|
let vector4 = null;
 | 
						|
let color4 = null;
 | 
						|
 | 
						|
import Color4 from './Color4.js';
 | 
						|
import { Vector2, Vector4, REVISION, createCanvasElement } from 'three';
 | 
						|
 | 
						|
class Backend {
 | 
						|
 | 
						|
	constructor( parameters = {} ) {
 | 
						|
 | 
						|
		this.parameters = Object.assign( {}, parameters );
 | 
						|
		this.data = new WeakMap();
 | 
						|
		this.renderer = null;
 | 
						|
		this.domElement = null;
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	async init( renderer ) {
 | 
						|
 | 
						|
		this.renderer = renderer;
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	// render context
 | 
						|
 | 
						|
	begin( renderContext ) { }
 | 
						|
 | 
						|
	finish( renderContext ) { }
 | 
						|
 | 
						|
	// render object
 | 
						|
 | 
						|
	draw( renderObject, info ) { }
 | 
						|
 | 
						|
	// program
 | 
						|
 | 
						|
	createProgram( program ) { }
 | 
						|
 | 
						|
	destroyProgram( program ) { }
 | 
						|
 | 
						|
	// bindings
 | 
						|
 | 
						|
	createBindings( renderObject ) { }
 | 
						|
 | 
						|
	updateBindings( renderObject ) { }
 | 
						|
 | 
						|
	// pipeline
 | 
						|
 | 
						|
	createRenderPipeline( renderObject ) { }
 | 
						|
 | 
						|
	createComputePipeline( computeNode, pipeline ) { }
 | 
						|
 | 
						|
	destroyPipeline( pipeline ) { }
 | 
						|
 | 
						|
	// cache key
 | 
						|
 | 
						|
	needsRenderUpdate( renderObject ) { } // return Boolean ( fast test )
 | 
						|
 | 
						|
	getRenderCacheKey( renderObject ) { } // return String
 | 
						|
 | 
						|
	// node builder
 | 
						|
 | 
						|
	createNodeBuilder( renderObject ) { } // return NodeBuilder (ADD IT)
 | 
						|
 | 
						|
	// textures
 | 
						|
 | 
						|
	createSampler( texture ) { }
 | 
						|
 | 
						|
	createDefaultTexture( texture ) { }
 | 
						|
 | 
						|
	createTexture( texture ) { }
 | 
						|
 | 
						|
	copyTextureToBuffer( texture, x, y, width, height ) {}
 | 
						|
 | 
						|
	// attributes
 | 
						|
 | 
						|
	createAttribute( attribute ) { }
 | 
						|
 | 
						|
	createIndexAttribute( attribute ) { }
 | 
						|
 | 
						|
	updateAttribute( attribute ) { }
 | 
						|
 | 
						|
	destroyAttribute( attribute ) { }
 | 
						|
 | 
						|
	// canvas
 | 
						|
 | 
						|
	getContext() { }
 | 
						|
 | 
						|
	updateSize() { }
 | 
						|
 | 
						|
	// utils
 | 
						|
 | 
						|
	resolveTimestampAsync( renderContext, type ) { }
 | 
						|
 | 
						|
	hasFeatureAsync( name ) { } // return Boolean
 | 
						|
 | 
						|
	hasFeature( name ) { } // return Boolean
 | 
						|
 | 
						|
	getInstanceCount( renderObject ) {
 | 
						|
 | 
						|
		const { object, geometry } = renderObject;
 | 
						|
 | 
						|
		return geometry.isInstancedBufferGeometry ? geometry.instanceCount : ( object.isInstancedMesh ? object.count : 1 );
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	getDrawingBufferSize() {
 | 
						|
 | 
						|
		vector2 = vector2 || new Vector2();
 | 
						|
 | 
						|
		return this.renderer.getDrawingBufferSize( vector2 );
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	getScissor() {
 | 
						|
 | 
						|
		vector4 = vector4 || new Vector4();
 | 
						|
 | 
						|
		return this.renderer.getScissor( vector4 );
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	setScissorTest( boolean ) { }
 | 
						|
 | 
						|
	getClearColor() {
 | 
						|
 | 
						|
		const renderer = this.renderer;
 | 
						|
 | 
						|
		color4 = color4 || new Color4();
 | 
						|
 | 
						|
		renderer.getClearColor( color4 );
 | 
						|
 | 
						|
		color4.getRGB( color4, this.renderer.currentColorSpace );
 | 
						|
 | 
						|
		return color4;
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	getDomElement() {
 | 
						|
 | 
						|
		let domElement = this.domElement;
 | 
						|
 | 
						|
		if ( domElement === null ) {
 | 
						|
 | 
						|
			domElement = ( this.parameters.canvas !== undefined ) ? this.parameters.canvas : createCanvasElement();
 | 
						|
 | 
						|
			// OffscreenCanvas does not have setAttribute, see #22811
 | 
						|
			if ( 'setAttribute' in domElement ) domElement.setAttribute( 'data-engine', `three.js r${REVISION} webgpu` );
 | 
						|
 | 
						|
			this.domElement = domElement;
 | 
						|
 | 
						|
		}
 | 
						|
 | 
						|
		return domElement;
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	// resource properties
 | 
						|
 | 
						|
	set( object, value ) {
 | 
						|
 | 
						|
		this.data.set( object, value );
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	get( object ) {
 | 
						|
 | 
						|
		let map = this.data.get( object );
 | 
						|
 | 
						|
		if ( map === undefined ) {
 | 
						|
 | 
						|
			map = {};
 | 
						|
			this.data.set( object, map );
 | 
						|
 | 
						|
		}
 | 
						|
 | 
						|
		return map;
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	has( object ) {
 | 
						|
 | 
						|
		return this.data.has( object );
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	delete( object ) {
 | 
						|
 | 
						|
		this.data.delete( object );
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
export default Backend;
 |