Backend.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  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. // attributes
  39. createAttribute( attribute ) { }
  40. createIndexAttribute( attribute ) { }
  41. updateAttribute( attribute ) { }
  42. destroyAttribute( attribute ) { }
  43. // canvas
  44. updateSize() { }
  45. // utils
  46. hasFeature( name ) { } // return Boolean
  47. getInstanceCount( renderObject ) {
  48. const { object, geometry } = renderObject;
  49. return geometry.isInstancedBufferGeometry ? geometry.instanceCount : ( object.isInstancedMesh ? object.count : 1 );
  50. }
  51. getDrawingBufferSize() {
  52. vector2 = vector2 || new Vector2();
  53. return this.renderer.getDrawingBufferSize( vector2 );
  54. }
  55. getScissor() {
  56. vector4 = vector4 || new Vector4();
  57. return this.renderer.getScissor( vector4 );
  58. }
  59. getDomElement() {
  60. let domElement = this.domElement;
  61. if ( domElement === null ) {
  62. this.domElement = domElement = ( this.parameters.canvas !== undefined ) ? this.parameters.canvas : this.createCanvasElement();
  63. }
  64. return domElement;
  65. }
  66. createCanvasElement() {
  67. const canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );
  68. canvas.style.display = 'block';
  69. return canvas;
  70. }
  71. // resource properties
  72. get( object ) {
  73. let map = this.data.get( object );
  74. if ( map === undefined ) {
  75. map = {};
  76. this.data.set( object, map );
  77. }
  78. return map;
  79. }
  80. delete( object ) {
  81. this.data.delete( object );
  82. }
  83. }
  84. export default Backend;