osg.RenderInfo是OpenSceneGraph的一个核心类,用于提供渲染过程中关于状态,性能和统计数据的信息。
osg::RenderInfo::RenderInfo();
获取当前渲染状态(osg::State)。
osg::State* getState() const;
设置当前渲染的相机(osg::Camera)。
void setCamera(osg::Camera* camera);
获取当前渲染的相机。
osg::Camera* getCamera() const;
获取当前渲染的帧信息(osg::FrameStamp)。
osg::FrameStamp* getFrameStamp() const;
设置当前使用的渲染器(osg::Renderer)。
void setRenderer(osg::Renderer* renderer);
获取当前使用的渲染器。
osg::Renderer* getRenderer() const;
获取当前遍历的次数。
unsigned int getTraversalNumber() const;
获取当前遍历的索引。
unsigned int getTraversalIndex() const;
获取当前渲染的遍历次数。
unsigned int getDrawTraversalNumber() const;
获取当前渲染的遍历索引。
unsigned int getDrawTraversalIndex() const;
获取渲染目标的视口(osg::Viewport)。
osg::Viewport* getViewport() const;
获取当前使用的投影矩阵(osg::Matrix)。
const osg::Matrix& getProjectionMatrix() const;
获取当前使用的模型视图矩阵(osg::Matrix)。
const osg::Matrix& getModelViewMatrix() const;
获取当前使用的几何裁剪后的回调函数(osg::Drawable::DrawCallback)。
osg::Drawable::DrawCallback* getFilteredCullDrawCallback() const;
获取当前使用的回调函数(osg::Drawable::DrawCallback)。
osg::Drawable::DrawCallback* getDrawCallback() const;
获取用于统计信息的结构体osg::Stats。
osg::Stats* getStats() const;
osg.RenderInfo还提供了一些用于性能统计的数据。
获取当前使用的渲染模式(线框,点云,纹理等等)。
GLint* getMode() const;
获取渲染的元素数量(顶点/三角形数量)。
unsigned int getNumDrawElements() const;
获取渲染的顶点数量。
unsigned int getNumVertices() const;
获取渲染的三角形数量。
unsigned int getNumPrimitives() const;
获取渲染的实例数量。
unsigned int getNumInstances() const;
获取状态更改的数量。
unsigned int getNumStateChanges() const;
获取纹理状态更改的数量。
unsigned int getNumTextureStateChanges() const;
获取属性状态更改的数量。
unsigned int getNumAttributeStateChanges() const;
获取Uniform状态更改的数量。
unsigned int getNumUniformStateChanges() const;
获取渲染的实例化元素(顶点/三角形)数量。
unsigned int getNumDrawElementsInstanced() const;
获取渲染的总实例数量。
unsigned int getNumInstancesRendered() const;
osgViewer::Viewer viewer;
osg::ref_ptr<osg::Node> scene = osgDB::readNodeFile("cow.osg");
viewer.setSceneData(scene);
viewer.addEventHandler(new osgViewer::StatsHandler());
while (!viewer.done())
{
osg::ref_ptr<osg::RenderInfo> renderInfo = viewer.getRenderInfo();
osg::ref_ptr<osg::Stats> stats = renderInfo->getStats();
viewer.frame();
}
在以上示例中,我们使用osgViewer::StatsHandler注册了一个事件处理程序,其作用是在渲染每一帧时输出一些性能统计信息。在事件处理程序中,我们获取了当前渲染信息并使用getStats()方法获取一个性能统计结构体,进而可以获取一些有用的性能统计数据。