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); | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  | } |