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;