最长的一帧 作者:王锐(array)
参考的osg源码版本为 3.6.3
osg自学笔记2——《最长的一帧》
0 概况
这里只研究一帧的渲染。
while (!viewer.done())
viewer.frame();
第一日
具体内容
osgViewer::ViewerBase::frame()函数
void ViewerBase::frame(double simulationTime)
{
if (_done) return;
// OSG_NOTICE<<std::endl<<"CompositeViewer::frame()"
// <<std::endl<<std::endl;
if (_firstFrame)//判断第一帧,初始化
{
viewerInit();//初始化
if (!isRealized())
{
realize();
}
_firstFrame = false;
}
advance(simulationTime);
eventTraversal();//事件遍历 鼠标键盘窗口
//遍历更新回调,负责更新 DatabasePager 与 ImagePager 分页数据处理组件。
updateTraversal();
//遍历渲染,线程处理方法,完成场景的筛选(cull)和绘制(draw)工作。
renderingTraversals();
}
osgViewer::View::init()函数
//完成视景器的初始化工作
void View::init()
{
OSG_INFO<<"View::init()"<<std::endl;
//_eventQueue 用于储存该视景器的事件队列。保存一个 GUIEventAdapter 的链表.
//createEvent 函数的作用是分配和返回一个新的 GUIEventAdapter事件的指针。
//osgGA::GUIEventAdapter,用于表达各种类型的鼠标、键盘、触压笔和窗口事件。
//initEvent 新事件的类型被指定为 FRAME 事件,即每