我有一个放置在矩形区域的2D纹理 - 它是一个动态纹理图像(640x480)。OpenSceneGraph Texture2D图像“脏”vs“setImage”性能
tex = new osg::Texture2D;
tex->setDataVariance(osg::Object::DYNAMIC);
tex->setResizeNonPowerOfTwoHint(false);
tex->setFilter(osg::Texture2D::MIN_FILTER, osg::Texture2D::NEAREST);
tex->setFilter(osg::Texture2D::MAG_FILTER, osg::Texture2D::NEAREST);
tex->setImage(myImage);
我的图像数据在另一个线程的频率(每n毫秒)更新:
myImage->setImage(
width,
height,
1,
3,
GL_BGR,
gl_data_size,
(BYTE *)newImageData,
osg::Image::AllocationMode::USE_MALLOC_FREE
);
此后,我要更新渲染图像,如果我用肮脏的(认为这是一个最好的方法更新)图像设置为纹理,例如
// Update callback
...
myImage->dirty();
...
我的表现比使用相同指针的图像替换慢了大约7-8倍。
// Update callback
...
tex->setImage(myImage);
...
阅读OSG文档和gidelines让我觉得正确的方法是 - 'dirty()'。但速度非常缓慢。我是否错误理解某些内容或在我的代码中存在错误?