我无法使用 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);
并单步执行动画,则所有文件都按顺序正确生成。