File: //var/www/aspa/three/addons/renderers/common/Backend.js
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;