123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241 |
- const isWeex = typeof WXEnvironment !== 'undefined';
- const isWeexIOS = isWeex && /ios/i.test(WXEnvironment.platform);
- const isWeexAndroid = isWeex && !isWeexIOS;
- import GLmethod from '../context-webgl/GLmethod';
- const GCanvasModule =
- (typeof weex !== 'undefined' && weex.requireModule) ? (weex.requireModule('gcanvas')) :
- (typeof __weex_require__ !== 'undefined') ? (__weex_require__('@weex-module/gcanvas')) : {};
- let isDebugging = false;
- let isComboDisabled = false;
- const logCommand = (function () {
- const methodQuery = [];
- Object.keys(GLmethod).forEach(key => {
- methodQuery[GLmethod[key]] = key;
- })
- const queryMethod = (id) => {
- return methodQuery[parseInt(id)] || 'NotFoundMethod';
- }
- const logCommand = (id, cmds) => {
- const mId = cmds.split(',')[0];
- const mName = queryMethod(mId);
- console.log(`=== callNative - componentId:${id}; method: ${mName}; cmds: ${cmds}`);
- }
- return logCommand;
- })();
- function joinArray(arr, sep) {
- let res = '';
- for (let i = 0; i < arr.length; i++) {
- if (i !== 0) {
- res += sep;
- }
- res += arr[i];
- }
- return res;
- }
- const commandsCache = {}
- const GBridge = {
- callEnable: (ref, configArray) => {
- commandsCache[ref] = [];
- return GCanvasModule.enable({
- componentId: ref,
- config: configArray
- });
- },
- callEnableDebug: () => {
- isDebugging = true;
- },
- callEnableDisableCombo: () => {
- isComboDisabled = true;
- },
- callSetContextType: function (componentId, context_type) {
- GCanvasModule.setContextType(context_type, componentId);
- },
- callReset: function(id){
- GCanvasModule.resetComponent && canvasModule.resetComponent(componentId);
- },
- render: isWeexIOS ? function (componentId) {
- return GCanvasModule.extendCallNative({
- contextId: componentId,
- type: 0x60000001
- });
- } : function (componentId) {
- return callGCanvasLinkNative(componentId, 0x60000001, 'render');
- },
- render2d: isWeexIOS ? function (componentId, commands, callback) {
- if (isDebugging) {
- console.log('>>> >>> render2d ===');
- console.log('>>> commands: ' + commands);
- }
-
- GCanvasModule.render([commands, callback?true:false], componentId, callback);
- } : function (componentId, commands,callback) {
- if (isDebugging) {
- console.log('>>> >>> render2d ===');
- console.log('>>> commands: ' + commands);
- }
- callGCanvasLinkNative(componentId, 0x20000001, commands);
- if(callback){
- callback();
- }
- },
- callExtendCallNative: isWeexIOS ? function (componentId, cmdArgs) {
- throw 'should not be here anymore ' + cmdArgs;
- } : function (componentId, cmdArgs) {
- throw 'should not be here anymore ' + cmdArgs;
- },
- flushNative: isWeexIOS ? function (componentId) {
- const cmdArgs = joinArray(commandsCache[componentId], ';');
- commandsCache[componentId] = [];
- if (isDebugging) {
- console.log('>>> >>> flush native ===');
- console.log('>>> commands: ' + cmdArgs);
- }
- const result = GCanvasModule.extendCallNative({
- "contextId": componentId,
- "type": 0x60000000,
- "args": cmdArgs
- });
- const res = result && result.result;
- if (isDebugging) {
- console.log('>>> result: ' + res);
- }
- return res;
- } : function (componentId) {
- const cmdArgs = joinArray(commandsCache[componentId], ';');
- commandsCache[componentId] = [];
- if (isDebugging) {
- console.log('>>> >>> flush native ===');
- console.log('>>> commands: ' + cmdArgs);
- }
- const result = callGCanvasLinkNative(componentId, 0x60000000, cmdArgs);
- if (isDebugging) {
- console.log('>>> result: ' + result);
- }
- return result;
- },
- callNative: function (componentId, cmdArgs, cache) {
- if (isDebugging) {
- logCommand(componentId, cmdArgs);
- }
- commandsCache[componentId].push(cmdArgs);
- if (!cache || isComboDisabled) {
- return GBridge.flushNative(componentId);
- } else {
- return undefined;
- }
- },
- texImage2D(componentId, ...args) {
- if (isWeexIOS) {
- if (args.length === 6) {
- const [target, level, internalformat, format, type, image] = args;
- GBridge.callNative(
- componentId,
- GLmethod.texImage2D + ',' + 6 + ',' + target + ',' + level + ',' + internalformat + ',' + format + ',' + type + ',' + image.src
- )
- } else if (args.length === 9) {
- const [target, level, internalformat, width, height, border, format, type, image] = args;
- GBridge.callNative(
- componentId,
- GLmethod.texImage2D + ',' + 9 + ',' + target + ',' + level + ',' + internalformat + ',' + width + ',' + height + ',' + border + ',' +
- + format + ',' + type + ',' + (image ? image.src : 0)
- )
- }
- } else if (isWeexAndroid) {
- if (args.length === 6) {
- const [target, level, internalformat, format, type, image] = args;
- GCanvasModule.texImage2D(componentId, target, level, internalformat, format, type, image.src);
- } else if (args.length === 9) {
- const [target, level, internalformat, width, height, border, format, type, image] = args;
- GCanvasModule.texImage2D(componentId, target, level, internalformat, width, height, border, format, type, (image ? image.src : 0));
- }
- }
- },
- texSubImage2D(componentId, target, level, xoffset, yoffset, format, type, image) {
- if (isWeexIOS) {
- if (arguments.length === 8) {
- GBridge.callNative(
- componentId,
- GLmethod.texSubImage2D + ',' + 6 + ',' + target + ',' + level + ',' + xoffset + ',' + yoffset, + ',' + format + ',' + type + ',' + image.src
- )
- }
- } else if (isWeexAndroid) {
- GCanvasModule.texSubImage2D(componentId, target, level, xoffset, yoffset, format, type, image.src);
- }
- },
- bindImageTexture(componentId, src, imageId) {
- GCanvasModule.bindImageTexture([src, imageId], componentId);
- },
- perloadImage([url, id], callback) {
- GCanvasModule.preLoadImage([url, id], function (image) {
- image.url = url;
- image.id = id;
- callback(image);
- });
- },
-
- measureText(text, fontStyle, componentId) {
- return GCanvasModule.measureText([text, fontStyle], componentId);
- },
-
- getImageData (componentId, x, y, w, h, callback) {
- GCanvasModule.getImageData([x, y,w,h],componentId,callback);
- },
-
- putImageData (componentId, data, x, y, w, h, callback) {
- GCanvasModule.putImageData([x, y,w,h,data],componentId,callback);
- },
-
- toTempFilePath(componentId, x, y, width, height, destWidth, destHeight, fileType, quality, callback){
- GCanvasModule.toTempFilePath([x, y, width,height, destWidth, destHeight, fileType, quality], componentId, callback);
- }
- }
- export default GBridge;
|