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