Aframe 如何在需要时获得仅将画布内容上载到纹理的帧

Aframe 如何在需要时获得仅将画布内容上载到纹理的帧,aframe,Aframe,如何阻止每帧上载画布纹理 我在初始化时只设置了一次画布,但检查了对texImage2D的调用,它正在不断上传 const elem=document.querySelector(“#ui span”); 让计数=0; WebGLRenderingContext.prototype.texImage2D=(函数(origFn){ 返回函数(…args){ elem.textContent=[++count,…args].join(“”); 原始呼叫(此,…args); }; }(WebGLRen

如何阻止每帧上载画布纹理

我在初始化时只设置了一次画布,但检查了对
texImage2D
的调用,它正在不断上传

const elem=document.querySelector(“#ui span”);
让计数=0;
WebGLRenderingContext.prototype.texImage2D=(函数(origFn){
返回函数(…args){
elem.textContent=[++count,…args].join(“”);
原始呼叫(此,…args);
};
}(WebGLRenderingContext.prototype.texImage2D))
#用户界面{
位置:固定;
左:0;
排名:0;
z指数:1000;
背景:灰色;
颜色:白色;
填充:.5em;
}

AFRAME.registerComponent('draw-canvas-once'{
架构:{type:'selector'},
init:函数(){
const canvas=this.canvas=this.data;
const ctx=this.ctx=canvas.getContext('2d');
ctx.fillStyle='#F00';
ctx.fillRect(0,0,canvas.width,canvas.height);
ctx.font=“70px无衬线”;
ctx.textAlign=“中心”;
ctx.textb基线=“中间”;
ctx.fillStyle=“#000”;
ctx.fillText(“X”,150,75);
},
});
texImage2D调用计数:
A-Frame正在执行以下操作:

loadCanvas: function (src, data, cb) {
  // Hack readyState and HAVE_CURRENT_DATA on canvas to work with THREE.VideoTexture
  src.readyState = 2;
  src.HAVE_CURRENT_DATA = 2;
  this.loadVideo(src, data, cb);
},
合并PR时出现的错误,将修复


同时,您可以手动创建一个three.js CanvaTexture,并将其分配给组件中的材质。

它实际上是每帧上传的吗?是否可能
WebGLRenderingContext.prototype.texImage2D
在到达上传到GPU的部件之前进行检查并提前返回?您可以查看Performance Tab+flame chart并查找对WebGL TexImage2D的调用。TexImage2D内部没有任何检查(我写了它,请参阅配置文件),是的,每个帧都会上载它。和。它会检查什么?为了避免上传,需要做大量的工作来跟踪画布没有改变,纹理本身也没有通过其他方式改变。这就像v8检查a=b时a还没有b而不是仅仅分配它一样荒谬。抱歉,看起来a-Frame出于某种原因将其创建为一个3.js视频纹理。将提交问题并修复。