74 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
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);
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
} |