Backend.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. let vector2 = null;
  2. let vector4 = null;
  3. let color4 = null;
  4. import Color4 from './Color4.js';
  5. import { Vector2, Vector4, REVISION, createCanvasElement } from 'three';
  6. class Backend {
  7. constructor( parameters = {} ) {
  8. this.parameters = Object.assign( {}, parameters );
  9. this.data = new WeakMap();
  10. this.renderer = null;
  11. this.domElement = null;
  12. }
  13. async init( renderer ) {
  14. this.renderer = renderer;
  15. }
  16. // render context
  17. begin( renderContext ) { }
  18. finish( renderContext ) { }
  19. // render object
  20. draw( renderObject, info ) { }
  21. // program
  22. createProgram( program ) { }
  23. destroyProgram( program ) { }
  24. // bindings
  25. createBindings( renderObject ) { }
  26. updateBindings( renderObject ) { }
  27. // pipeline
  28. createRenderPipeline( renderObject ) { }
  29. createComputePipeline( computeNode, pipeline ) { }
  30. destroyPipeline( pipeline ) { }
  31. // cache key
  32. needsRenderUpdate( renderObject ) { } // return Boolean ( fast test )
  33. getRenderCacheKey( renderObject ) { } // return String
  34. // node builder
  35. createNodeBuilder( renderObject ) { } // return NodeBuilder (ADD IT)
  36. // textures
  37. createSampler( texture ) { }
  38. createDefaultTexture( texture ) { }
  39. createTexture( texture ) { }
  40. copyTextureToBuffer( texture, x, y, width, height ) {}
  41. // attributes
  42. createAttribute( attribute ) { }
  43. createIndexAttribute( attribute ) { }
  44. updateAttribute( attribute ) { }
  45. destroyAttribute( attribute ) { }
  46. // canvas
  47. getContext() { }
  48. updateSize() { }
  49. // utils
  50. resolveTimestampAsync( renderContext, type ) { }
  51. hasFeatureAsync( name ) { } // return Boolean
  52. hasFeature( name ) { } // return Boolean
  53. getInstanceCount( renderObject ) {
  54. const { object, geometry } = renderObject;
  55. return geometry.isInstancedBufferGeometry ? geometry.instanceCount : ( object.isInstancedMesh ? object.count : 1 );
  56. }
  57. getDrawingBufferSize() {
  58. vector2 = vector2 || new Vector2();
  59. return this.renderer.getDrawingBufferSize( vector2 );
  60. }
  61. getScissor() {
  62. vector4 = vector4 || new Vector4();
  63. return this.renderer.getScissor( vector4 );
  64. }
  65. setScissorTest( boolean ) { }
  66. getClearColor() {
  67. const renderer = this.renderer;
  68. color4 = color4 || new Color4();
  69. renderer.getClearColor( color4 );
  70. color4.getRGB( color4, this.renderer.currentColorSpace );
  71. return color4;
  72. }
  73. getDomElement() {
  74. let domElement = this.domElement;
  75. if ( domElement === null ) {
  76. domElement = ( this.parameters.canvas !== undefined ) ? this.parameters.canvas : createCanvasElement();
  77. // OffscreenCanvas does not have setAttribute, see #22811
  78. if ( 'setAttribute' in domElement ) domElement.setAttribute( 'data-engine', `three.js r${REVISION} webgpu` );
  79. this.domElement = domElement;
  80. }
  81. return domElement;
  82. }
  83. // resource properties
  84. set( object, value ) {
  85. this.data.set( object, value );
  86. }
  87. get( object ) {
  88. let map = this.data.get( object );
  89. if ( map === undefined ) {
  90. map = {};
  91. this.data.set( object, map );
  92. }
  93. return map;
  94. }
  95. has( object ) {
  96. return this.data.has( object );
  97. }
  98. delete( object ) {
  99. this.data.delete( object );
  100. }
  101. }
  102. export default Backend;