可以根据5.0以下的占比来看。 不过,这是googleplay的。 要是能拿到微信的就更好了。
1赞
找到了 ·· 是deleteframebuffer的问题 去掉就可以了
cc.director.once(cc.Director.EVENT_AFTER_DRAW, () => {
var target = tar._sgNode;
//设置节点位置否则会在左下角
tar.opos = tar.getPosition();
tar.setPosition(tar.width/2,tar.height/2);
// 以下width, height变量为局部截图的宽高
var width = tar.width;
var height = tar.height;
// 用rt截图
var rt = cc.RenderTexture.create(width,height,cc.Texture2D.PIXEL_FORMAT_RGBA8888, gl.DEPTH_STENCIL);
rt.begin();
rt.beginWithClear(0,0,0,0)
target.visit();
rt.end();
tar.setPosition(tar.opos);
let texture = rt._texture._glID;
let frameBuffer = gl.createFramebuffer();
gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer);
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);
// 每个像素点需要rgba四个值
let data = new Uint8Array(width * height * 4);
gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, data);
// RenderTexture截出来的图是反向的,下面这段代码通过把data数组反向,来把图像反过来。
let halfHeight = Math.floor(height / 2);
let bytesPerRow = width * 4;
let temp = new Uint8Array(width * 4);
for (let y = 0; y < halfHeight; ++y) {
let topOffset = Math.round(y * bytesPerRow);
let bottomOffset = Math.round((height - y - 1) * bytesPerRow);
temp.set(data.subarray(topOffset, topOffset + bytesPerRow));
data.copyWithin(topOffset, bottomOffset, bottomOffset + bytesPerRow);
data.set(temp, bottomOffset);
}
// RenderTexture截出来的图是反向的,上面这段代码通过把data数组反向,来把图像反过来。
//不知道什么原因这行会导致canvas整体被拉伸 但是删除这句话会导致画面固定 = =
//gl.deleteFramebuffer(frameBuffer);
// 创建一个2D Canvas来保存截图结果
let canvas = document.createElement('canvas');
canvas.width = width;
canvas.height = height;
let context = canvas.getContext('2d');
let imageData = context.createImageData(width, height);
imageData.data.set(data);
context.putImageData(imageData, 0, 0);
// str即为截图结果
var str = canvas.toDataURL('image/png');
});
1.9.3目前webgl可用的针对任意节点的截图方法(未完善)
deleteframebuffer后的canvas绘制有问题 输出查看canvas大小和缩放是正常的
如果有大佬有时间希望看看能给个方法不···
请单独发贴,不要挖坟
是我失策了,之前我统计的时候,只统计了国内用户,我曾以为…… 国内已经能代表最落后的版本了,哈哈哈。后来有 CP 反馈,他们的游戏要发往非洲等国家……………… Canvas 还是有需求的。不过开弓没有回头箭,我们也确实没办法在保持 WebGL 架构比较精简的前提下兼容 Canvas 了。
怎么强制使用WebGL
2.0 开始只有 webgl 了,不用操心这个
后面版本还有计划支持么?
没有了~ Laya 最近也宣布不支持 Canvas 了