前言
上一部分,通过十个章节的内容,对视景器的初始化与准备工作进行了系统性的剖析。本章将在该基础上,探讨vsg中的帧循环机制,主要包含前进到下一帧、事件处理、更新、记录与提交、呈现五个部分,同时整个过程包含了复杂的多线程处理与同步操作,本章作为帧循环部分的第一章,在整体介绍帧循环的内容的同时,将深入分析前进到下一帧的详细过程。
目录
- 1 帧循环
- 2 前进到下一帧
本章对参照用例(vulkanscenegraph显示倾斜模型-优快云博客)中的如下代码进行深入探讨。
while (true)
{
// render VulkanSceneGraph frame
{
if (!vsg_viewer->advanceToNextFrame())
{
break;
}
vsg_viewer->handleEvents();
vsg_viewer->update();
vsg_viewer->recordAndSubmit();
vsg_viewer->present();
}
frameNumber++;
}
1 帧循环
与OSG(OpenSceneGraph)帧循环中经典的事件遍历(Event Traversal)、更新遍历(Update Traversal)和渲染遍历(Rendering Traversal)类似,vsg帧循环中涉及同样的操作。VSG的事件处理阶段对应OSG的事件遍历(Event Traversal),负责处理用户输入和系统事件;更新阶段对应OSG的更新遍历(Update Traversal),完成场景数据的同步更新;而记录与提交阶段(包含资源编译、命令缓冲录制与提交)和最终的呈现阶段,则共同对应了OSG渲染遍历(Rendering Traversal),最终将渲染结果输出到显示窗口。这种设计即保留了OSG遍历流程的核心逻辑,同时兼顾Vulkan渲染的特点,采用更精细的阶段划分。

2 前进到下一帧
本小结对应的代码如下,接下来将通过代码来揭秘此过程的详细流程。
if (!vsg_viewer->advanceToNextFrame())
{
break;
}
上述代码为vsg::Viewer中的advanceToNextFrame函数的调用。
b

最低0.47元/天 解锁文章
1060

被折叠的 条评论
为什么被折叠?



