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
196 lines
3.1 KiB
6 months ago
|
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;
|