Backend.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. let vector2 = null;
  2. let vector4 = null;
  3. import { Vector2, Vector4 } 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. this.domElement = domElement = ( this.parameters.canvas !== undefined ) ? this.parameters.canvas : this.createCanvasElement();
  64. }
  65. return domElement;
  66. }
  67. createCanvasElement() {
  68. const canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );
  69. canvas.style.display = 'block';
  70. return canvas;
  71. }
  72. // resource properties
  73. get( object ) {
  74. let map = this.data.get( object );
  75. if ( map === undefined ) {
  76. map = {};
  77. this.data.set( object, map );
  78. }
  79. return map;
  80. }
  81. delete( object ) {
  82. this.data.delete( object );
  83. }
  84. }
  85. export default Backend;