osggraphicscost例子

这个例子比较有用,平均了三维场景CPU和GPU的花费。
进入GraphicsCostEstimator这个类,
 CostPair estimateCompileCost(const osg::Geometry* geometry) const { return 
_geometryEstimator->estimateCompileCost(geometry); }
    CostPair estimateDrawCost
(const osg::Geometry* geometry) const { return _geometryEstimator->estimateDrawCost
(geometry); }
    CostPair estimateCompileCost(const osg::Texture* texture) const { 
return _textureEstimator->estimateCompileCost(texture); }
    CostPair 
estimateDrawCost(const osg::Texture* texture) const { return _textureEstimator-
>estimateDrawCost(texture); }
    CostPair estimateCompileCost(const osg::Program* 
program) const { return _programEstimator->estimateCompileCost(program); }
CostPair estimateDrawCost(const osg::Program* program) const { return 
_programEstimator->estimateDrawCost(program); }
    CostPair estimateCompileCost
(const osg::Node* node) const;
    CostPair estimateDrawCost(const osg::Node* node) 
const;
对Geometry、Texture、Program和Node的编译和绘制都做了评估。
typedef std::pair<double, double> CostPair;
代表CPU和GPU所花的时间。
GraphicsCostEstimator负责评估Geometry、Texture、Program、Node编译和绘制所用的时间。
CollectCompileCosts这个类是计算时间的类,继承自osg::NodeVisitor,先来回忆一下
osg::NodeVisitor,它是一个访问者模式,节点accept它,它就可以通过apply函数实现相应的
功能。NodeCallback就是通过NodeVisitor实现,只是在没一帧的更新回调中都调用了这个
accept递归遍历。
我们回到这个例子,这个例子统计的时间并不是运行时统计的,而是事先定制好了一些基本的时
间,然后通过Geometry、Texture、Program、Node中的数据量。
看GeometryCostEstimator的setDefaults函数:
void GeometryCostEstimator::setDefaults()
{
    double transfer_bandwidth = 
10000000000.0; // 1GB/sec
    double gpu_bandwidth = 50000000000.0; // 50 GB/second
   
 double min_time = 0.00001; // 10 nano seconds.
    _arrayCompileCost.set(min_time, 
1.0/transfer_bandwidth, 256); // min time 1/10th of millisecond, min size 256
    
_primtiveSetCompileCost.set(min_time, 1.0/transfer_bandwidth, 256); // min time 

1/10th of millisecond, min size 256
    _arrayDrawCost.set(min_time, 

1.0/gpu_bandwidth, 256); // min time 1/10th of millisecond, min size 256;
   
_primtiveSetDrawCost.set(min_time, 1.0/gpu_bandwidth, 256); // min time 1/10th of 
millisecond, min size 256;
    _displayListCompileConstant = 0.0;
    
_displayListCompileFactor = 10.0;
}
通过这些基本的单位时间,计算总体的时间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值