我在使用CefSharp有界对象捕捉动画的每一帧时遇到问题。看来Browser.ScreenshotAsync
返回的位图并不总是正确同步。这是我的javascript渲染函数,它以恒定的速率水平移动WebGL对象:
function animate() {
object.position.x -= 100;
renderer.render(scene, camera);
cefBountObject('animate()');
}
这是我的CEF界限对象:
public void cefBountObject(string callback) {
Browser.ScreenshotAsync().ContinueWith((task) => {
task.Result.Save(string.Format("{0:D4}.png", frameNumber++));
Browser.EvaluateScriptAsync(callback);
});
}
这样可以保存序列中的每个文件而不跳过:0000.png,0001.png,0002.png等。但是,有些图像文件是重复的,有些图像文件会跳帧。我想我遇到了一个不同步的线程问题,但我不知道它可能在哪里。实际上,如果我在最后一行Browser.EvaluateScriptAsync(callback);
上放置一个断点并逐步执行动画,则所有文件都会按顺序正确生成。