ios色差的原因是对canvas调用了两次getContext(为了获取gl对象),启动代码哪里一次,然后,引擎内部一次
我改了一个不修改引擎源码的解决方案,可以不修改adpater里面的代码
game.js
“use strict”;
var splash = require("./splash");
function loadEngine() {
require(“adapter-min.js”);
__globalAdapter.init();
requirePlugin(“cocos”);
__globalAdapter.adaptEngine();
require("./ccRequire");
require("./src/settings");
// Introduce Cocos Service here
require("./main");
// Adjust devicePixelRatio
cc.view._maxPixelRatio = 4;
if (cc.sys.platform !== cc.sys.WECHAT_GAME_SUB) {
// Release Image objects after uploaded gl texture
cc.macro.CLEANUP_IMAGE_CACHE = true;
}
window.boot();
}
function main() {
// 记录启动日期
wx.cocos_creator_launch_date = new Date();
// 创建Canvas对象
Object.defineProperty(wx, "__cocos_creator_canvas__", {
writable: true,
configurable: true,
value: wx.createCanvas()
});
// 创建GL对象
Object.defineProperty(wx, "__cocos_creator_gl__", {
writable: true,
configurable: true,
value: wx.__cocos_creator_canvas__.getContext("webgl", {
alpha: false,
antialias: false,
depth: true,
preserveDrawingBuffer: false,
stencil: true
})
});
// 重新实现wx.__cocos_creator_canvas__的getContext接口
// 为了防止色差,不能反复调用getContext
Object.defineProperty(wx.__cocos_creator_canvas__, "__cocos_creator_get_context__", {
writable: true,
configurable: true,
value: wx.__cocos_creator_canvas__.__cocos_creator_get_context__
});
Object.defineProperty(wx.__cocos_creator_canvas__, "getContext", {
writable: true,
configurable: true,
value: function () {
return wx.__cocos_creator_gl__;
}
});
// 重新实现wx对象的createCanvas接口
// 增加计数功能
// 如果__cocos_creator_canvas_counter__为0,返回__cocos_creator_canvas__
// 如果__cocos_creator_canvas_counter__大于0,表示获取离屏画布,创建新的canvas
Object.defineProperty(wx, "__cocos_creator_canvas_counter__", {
writable: true,
configurable: true,
value: 0
});
Object.defineProperty(wx, "__cocos_creator_create_canvas__", {
writable: true,
configurable: true,
value: wx.createCanvas
});
Object.defineProperty(wx, "createCanvas", {
writable: true,
configurable: true,
value: function (type, opts) {
var canvas;
if (wx.__cocos_creator_canvas_counter__ === 0) {
canvas = wx.__cocos_creator_canvas__;
} else {
canvas = wx.__cocos_creator_create_canvas__();
}
wx.__cocos_creator_canvas_counter__++;
return canvas;
}
});
// 注册清理启动画面接口
Object.defineProperty(wx, "splashFinish", {
writable: true,
configurable: true,
value: function () {
splash.splashClean();
}
});
// 初始化启动画面
splash.splashSetup(function () {
setTimeout(function () {
loadEngine();
}, 0.5);
});
}
main();