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