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