Blame view

uni_modules/uview-plus/libs/util/gcanvas/env/canvas.js 1.82 KB
a2702f6d   刘淇   巡查计划
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
  import GContext2D from '../context-2d/RenderingContext';
  import GContextWebGL from '../context-webgl/RenderingContext';
  
  export default class GCanvas {
  
      // static GBridge = null;
  
      id = null;
  
      _needRender = true;
  
      constructor(id, { disableAutoSwap }) {
          this.id = id;
  
          this._disableAutoSwap = disableAutoSwap;
          if (disableAutoSwap) {
              this._swapBuffers = () => {
                  GCanvas.GBridge.render(this.id);
              }
          }
      }
  
      getContext(type) {
  
          let context = null;
  
          if (type.match(/webgl/i)) {
              context = new GContextWebGL(this);
  
              context.componentId = this.id;
  
              if (!this._disableAutoSwap) {
                  const render = () => {
                      if (this._needRender) {
                          GCanvas.GBridge.render(this.id);
                          this._needRender = false;
                      }
                  }
                  setInterval(render, 16);
              }
  
              GCanvas.GBridge.callSetContextType(this.id, 1); // 0 for 2d; 1 for webgl
          } else if (type.match(/2d/i)) {
              context = new GContext2D(this);
  
              context.componentId = this.id;
  
  //             const render = ( callback ) => {
  // 
  //                 const commands = context._drawCommands;
  //                 context._drawCommands = '';
  // 
  //                 GCanvas.GBridge.render2d(this.id, commands, callback);
  //                 this._needRender = false;
  //             }
  // 			//draw方法触发
  // 			context._flush = render;
  //             //setInterval(render, 16);
  
              GCanvas.GBridge.callSetContextType(this.id, 0);
          } else {
              throw new Error('not supported context ' + type);
          }
  
          return context;
  
      }
  
      reset() {
          GCanvas.GBridge.callReset(this.id);
      }
  
  
  }