diff options
| -rw-r--r-- | indra/newview/llviewermedia.cpp | 15 | 
1 files changed, 8 insertions, 7 deletions
| diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index 969f0a3594..aae3bd7f25 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -2965,15 +2965,16 @@ void LLViewerMediaImpl::doMediaTexUpdate(LLViewerMediaTexture* media_tex, U8* da      LL_PROFILE_ZONE_SCOPED_CATEGORY_MEDIA;      LLMutexLock lock(&mLock); // don't allow media source tear-down during update -    const LLGLuint tex_name = media_tex->getGLTexture() ? media_tex->getGLTexture()->getTexName() : (LLGLuint)0; -    if (!tex_name) -    { -        llassert(false); -        return; -    } -      // wrap "data" in an LLImageRaw but do NOT make a copy      LLPointer<LLImageRaw> raw = new LLImageRaw(data, media_tex->getWidth(), media_tex->getHeight(), media_tex->getComponents(), true); +         +    // *NOTE: Recreating the GL texture each media update may seem wasteful +    // (note the texture creation in preMediaTexUpdate), however, it apparently +    // prevents GL calls from blocking, due to poor bookkeeping of state of +    // updated textures by the OpenGL implementation. +    // Allocate GL texture based on LLImageRaw but do NOT copy to GL +    LLGLuint tex_name = 0; +    media_tex->createGLTexture(0, raw, 0, TRUE, LLGLTexture::OTHER, true, &tex_name);      // 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); | 
