У меня есть 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 ()». Но это очень медленно. Я что-то неправильно понимаю или в моем коде есть ошибка?