長方形の領域に2Dテクスチャを配置しています。これは動的テクスチャ画像(640x480)です。
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のドキュメントとガイドラインを読むと、正しい方法は-'dirty()'だと思います。しかし、それは非常に遅いです。何かを誤解していませんか、それともコードに間違いがありますか?