|
楼主 |
发表于 2012-4-24 10:09:09
|
显示全部楼层
本帖最后由 blue.high 于 2012-4-24 10:10 编辑
array 发表于 2012-4-23 19:02
readPixels虽然比较慢,但是每帧只有一次的话,似乎也不是您能够感受出来的。我不知道您判断它影响效率的根 ...
谢谢。我的工程,当前处理每一帧所花的时间大概10~12毫秒。所要求的帧率是60帧/秒,即每帧16.7毫秒。也就是说当前处理一帧所用的时间还有5~7毫秒的盈余。所以我想把每一帧的画面保存后,不必等待显示(因为显卡打开了垂直同步,所以要等屏幕刷新时间点),让处理线程接着处理下一帧,充分利用5~7毫秒的盈余。
但程序稍做修改,只是加一个WindowCaptureCallback,用readPixels读出数据,每帧所花的时间就长了6毫秒左右,使得一帧处理时间经常超过16.7毫秒,这样原来的设计方案就没意义了。
RTT到一个纹理之后,显示出来是正常的,但这个纹理好象没有Image,想把这个纹理拷贝到另一个纹理,能实现吗?我用了下面的方法:
new osg::Texture2D(*texture2D, osg::CopyOp::DEEP_COPY_ALL);
或者 texture2D->clone(osg::CopyOp::DEEP_COPY_ALL)
都能得到非空的指针tex,但如下设置后根本没图像出来,
node->getOrCreateStateSet()->setTextureAttributeAndModes(0, tex,osg::StateAttribute::ON);
不知哪里出错了?
注:这样设置是能显示的。node->getOrCreateStateSet()->setTextureAttributeAndModes(0, texture2D,osg::StateAttribute::ON);
换个说法,不做shader编程,想在显存中的两个纹理对象间进行数据拷贝,能实现吗?
我看到有人在其他论坛说用DirectX是能实现的。 |
|