forked from mirror/openmw-tes3mp
Do not query the texture's image in osgMyGUI::OSGTexture
Doing so could result in a race condition if the draw thread is about to delete the image (UnRefImageDataAfterApply enabled)
This commit is contained in:
parent
148f2c9539
commit
cb8daaaee1
1 changed files with 10 additions and 14 deletions
|
@ -86,9 +86,12 @@ namespace osgMyGUI
|
||||||
if (!mImageManager)
|
if (!mImageManager)
|
||||||
throw std::runtime_error("No imagemanager set");
|
throw std::runtime_error("No imagemanager set");
|
||||||
|
|
||||||
mTexture = new osg::Texture2D(mImageManager->getImage(fname));
|
osg::ref_ptr<osg::Image> image (mImageManager->getImage(fname));
|
||||||
|
mTexture = new osg::Texture2D(image);
|
||||||
mTexture->setWrap(osg::Texture::WRAP_S, osg::Texture::CLAMP_TO_EDGE);
|
mTexture->setWrap(osg::Texture::WRAP_S, osg::Texture::CLAMP_TO_EDGE);
|
||||||
mTexture->setWrap(osg::Texture::WRAP_T, osg::Texture::CLAMP_TO_EDGE);
|
mTexture->setWrap(osg::Texture::WRAP_T, osg::Texture::CLAMP_TO_EDGE);
|
||||||
|
mTexture->setTextureWidth(image->s());
|
||||||
|
mTexture->setTextureHeight(image->t());
|
||||||
// disable mip-maps
|
// disable mip-maps
|
||||||
mTexture->setFilter(osg::Texture2D::MIN_FILTER, osg::Texture2D::LINEAR);
|
mTexture->setFilter(osg::Texture2D::MIN_FILTER, osg::Texture2D::LINEAR);
|
||||||
|
|
||||||
|
@ -107,8 +110,6 @@ namespace osgMyGUI
|
||||||
{
|
{
|
||||||
if(!mTexture.valid())
|
if(!mTexture.valid())
|
||||||
return 0;
|
return 0;
|
||||||
osg::Image *image = mTexture->getImage();
|
|
||||||
if(image) return image->s();
|
|
||||||
return mTexture->getTextureWidth();
|
return mTexture->getTextureWidth();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -116,8 +117,6 @@ namespace osgMyGUI
|
||||||
{
|
{
|
||||||
if(!mTexture.valid())
|
if(!mTexture.valid())
|
||||||
return 0;
|
return 0;
|
||||||
osg::Image *image = mTexture->getImage();
|
|
||||||
if(image) return image->t();
|
|
||||||
return mTexture->getTextureHeight();
|
return mTexture->getTextureHeight();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -128,15 +127,12 @@ namespace osgMyGUI
|
||||||
if (mLockedImage.valid())
|
if (mLockedImage.valid())
|
||||||
throw std::runtime_error("Texture already locked");
|
throw std::runtime_error("Texture already locked");
|
||||||
|
|
||||||
mLockedImage = mTexture->getImage();
|
|
||||||
if(!mLockedImage.valid())
|
|
||||||
{
|
|
||||||
mLockedImage = new osg::Image();
|
mLockedImage = new osg::Image();
|
||||||
mLockedImage->allocateImage(
|
mLockedImage->allocateImage(
|
||||||
mTexture->getTextureWidth(), mTexture->getTextureHeight(), mTexture->getTextureDepth(),
|
mTexture->getTextureWidth(), mTexture->getTextureHeight(), mTexture->getTextureDepth(),
|
||||||
mTexture->getSourceFormat(), mTexture->getSourceType()
|
mTexture->getSourceFormat(), mTexture->getSourceType()
|
||||||
);
|
);
|
||||||
}
|
|
||||||
return mLockedImage->data();
|
return mLockedImage->data();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue