yangan
2024-12-13 5e782ca0358af8a10998b5aa131af8b744f3ff0d
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);
    }
 
 
}