Backend.js 2.6 KB

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