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;
|