Fix for media textures failing to update (and eating lots of memory) on Mac/Intel

master
Dave Parks 2022-02-23 17:55:44 -06:00
parent d9a68339d5
commit fc0b238654
3 changed files with 22 additions and 9 deletions

View File

@ -1685,18 +1685,23 @@ void LLImageGL::syncToMainThread(LLGLuint new_tex_name)
[=]()
{
LL_PROFILE_ZONE_NAMED("cglt - delete callback");
if (new_tex_name != 0)
{
if (mTexName != 0 && mTexName != new_tex_name)
{
LLImageGL::deleteTextures(1, &mTexName);
}
mTexName = new_tex_name;
unref();
}
syncTexName(new_tex_name);
unref();
});
}
void LLImageGL::syncTexName(LLGLuint texname)
{
if (texname != 0)
{
if (mTexName != 0 && mTexName != texname)
{
LLImageGL::deleteTextures(1, &mTexName);
}
mTexName = texname;
}
}
BOOL LLImageGL::readBackRaw(S32 discard_level, LLImageRaw* imageraw, bool compressed_ok) const
{
llassert_always(sAllowReadBackRaw) ;

View File

@ -304,6 +304,9 @@ public:
void setTexName(GLuint texName) { mTexName = texName; }
//similar to setTexName, but will call deleteTextures on mTexName if mTexName is not 0 or texname
void syncTexName(LLGLuint texname);
//for debug use: show texture size distribution
//----------------------------------------
static S32 sCurTexSizeBar ;

View File

@ -2997,10 +2997,15 @@ void LLViewerMediaImpl::doMediaTexUpdate(LLViewerMediaTexture* media_tex, U8* da
// copy just the subimage covered by the image raw to GL
media_tex->setSubImage(data, data_width, data_height, x_pos, y_pos, width, height, tex_name);
if (sync)
{
media_tex->getGLTexture()->syncToMainThread(tex_name);
}
else
{
media_tex->getGLTexture()->syncTexName(tex_name);
}
// release the data pointer before freeing raw so LLImageRaw destructor doesn't
// free memory at data pointer