最开是是初始化一个 RenderTexture 对象然后调用 drawTextureAt 画上纹理数据再 readPixels,但是得到的数据都是 0,然后发现要用相机照一下才有数据,于是直接改成下面这种将 node 渲染到 RenderTexture 再读取,在 web 端没问题,但是在 PC 原生端下面会巨卡。。。
引擎版本:2.4.7
有没有哪位大佬指点一下?或者给个别的方案也行。
自己能想到的方案:
jsb绑定到 c++,用c++直接读取纹理数据。。 这个方案我不会c++更不会jsb绑定
发布web版用electron包装成桌面程序。。 这个方案还得自己再写一套热更新方案
还有就是 shader 中 CCTexture(texture, v_uv0, o) 方法可以得到像素信息,
不知道能不能在片元着色器中将得到的像素值传回 UI 层?
这个是我现在用到的代码。。PC原生端调用该方法巨卡。。。而且得到的数据也有问题
function getRenderTexture(node){
if (cc.isValid(node)) {
const width = Math.floor(node.width),
height = Math.floor(node.height),
out = new cc.RenderTexture(),
cameraNode = new cc.Node(),
camera = cameraNode.addComponent(cc.Camera);
out.initWithSize(width, height);
cameraNode.parent = node;
camera.clearFlags |= cc.Camera.ClearFlags.COLOR;
camera.backgroundColor = cc.color(0, 0, 0, 0);
camera.zoomRatio = cc.winSize.height / height;
camera.targetTexture = out;
camera.render(node);
cameraNode.destroy();
return out;
}
return null;
}