You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

196 lines
3.1 KiB

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;