【发布时间】:2011-10-15 15:33:29
【问题描述】:
我有兴趣将来自glfx.js 的过滤器应用于实时视频。我已经成功地按照我的意愿导入和处理帧,但是这种方法效率低下。在我的页面设置中,我这样做:
var fbCanvas = document.getElementById('framebuffer');
var fb = fbCanvas.getContext('2d');
var video = document.getElementById('video');
var output = fx.canvas();
然后,以 25hz(视频的播放速率),我这样做:
fb.drawImage(video, 0, 0);
var frame = output.texture(fbCanvas);
output.draw(frame).hueSaturation(-0.5, 0).update();
但我希望能够做到这一点:
var frame = output.texture(video);
output.draw(frame).hueSaturation(-0.5, 0).update();
对 output.texture 的调用只是 gl.texImage2D 的一个包装器,它似乎只接受图像或画布——而不是视频元素。
我的问题是,通过对隐藏的画布执行额外的 drawImage,我对性能有多大影响?将视频帧放入 GL 纹理以便我可以在它们上实时运行 GL 着色器的最快方法是什么?
谢谢。
【问题讨论】:
-
我不知道 glfx.js,但根据khronos.org/registry/webgl/specs/latest
gl.texImage2D将接受HTMLVideoElement。 -
是的,glfx.js 的作者已经更新了库来支持它。谢谢,伊万!
标签: html canvas html5-video webgl