bool LLWebBrowserTexture::updateBrowserTexture() { if (!adjustSize()) return false; LLPluginClassMedia* media = mMediaSource->getMediaPlugin(); if(!media->textureValid()) return false; if(mMediaSource->mNeedsNewTexture || media->getTextureWidth() != getFullWidth() || media->getTextureHeight() != getFullHeight() ) { //releaseGLTexture(); mFullWidth = media->getTextureWidth(); mFullHeight = media->getTextureHeight(); mTextureCoordsOpenGL = media->getTextureCoordsOpenGL(); const LLColor4U fill_color(0,0,0,255); // will create mWidth * mHeight sized texture, using the texture params specified by the media. generateGLTexture( media->getTextureFormatInternal(), media->getTextureFormatPrimary(), media->getTextureFormatType(), media->getTextureFormatSwapBytes(), &fill_color); //Initialize the texture to black. mMediaSource->mNeedsNewTexture = false; } return true; }
bool LLWebBrowserTexture::updateBrowserTexture() { if (!adjustSize()) return false; LLPluginClassMedia* media = mMediaSource->getMediaPlugin(); if(!media->textureValid()) return false; if(mMediaSource->mNeedsNewTexture || media->getTextureWidth() != mWidth || media->getTextureHeight() != mHeight ) { releaseGLTexture(); mWidth = media->getTextureWidth(); mHeight = media->getTextureHeight(); mTextureCoordsOpenGL = media->getTextureCoordsOpenGL(); // will create mWidth * mHeight sized texture, using the texture params specified by the media. LLDynamicTexture::generateGLTexture( media->getTextureFormatInternal(), media->getTextureFormatPrimary(), media->getTextureFormatType(), media->getTextureFormatSwapBytes()); mMediaSource->mNeedsNewTexture = false; } return true; }
/*LLViewerMediaTexture*/LLViewerTexture* LLViewerMediaImpl::updatePlaceholderImage() { if(mTextureId.isNull()) { // The code that created this instance will read from the plugin's bits. return NULL; } LLViewerMediaTexture* placeholder_image = (LLViewerMediaTexture*)LLViewerTextureManager::getFetchedTexture( mTextureId ); LLPluginClassMedia* plugin = getMediaPlugin(); placeholder_image->getLastReferencedTimer()->reset(); if (mNeedsNewTexture || placeholder_image->getUseMipMaps() || ! placeholder_image->mIsMediaTexture || (placeholder_image->getWidth() != plugin->getTextureWidth()) || (placeholder_image->getHeight() != plugin->getTextureHeight()) || (mTextureUsedWidth != plugin->getWidth()) || (mTextureUsedHeight != plugin->getHeight()) ) { llinfos << "initializing media placeholder" << llendl; llinfos << "movie image id " << mTextureId << llendl; int texture_width = plugin->getTextureWidth(); int texture_height = plugin->getTextureHeight(); int texture_depth = plugin->getTextureDepth(); // MEDIAOPT: check to see if size actually changed before doing work placeholder_image->destroyGLTexture(); // MEDIAOPT: apparently just calling setUseMipMaps(FALSE) doesn't work? placeholder_image->reinit(FALSE); // probably not needed // MEDIAOPT: seems insane that we actually have to make an imageraw then // immediately discard it LLPointer<LLImageRaw> raw = new LLImageRaw(texture_width, texture_height, texture_depth); raw->clear(0x0f, 0x0f, 0x0f, 0xff); int discard_level = 0; // ask media source for correct GL image format constants placeholder_image->setExplicitFormat(plugin->getTextureFormatInternal(), plugin->getTextureFormatPrimary(), plugin->getTextureFormatType(), plugin->getTextureFormatSwapBytes()); placeholder_image->createGLTexture(discard_level, raw); // placeholder_image->setExplicitFormat() placeholder_image->setUseMipMaps(FALSE); // MEDIAOPT: set this dynamically on play/stop placeholder_image->mIsMediaTexture = true; mNeedsNewTexture = false; // If the amount of the texture being drawn by the media goes down in either width or height, // recreate the texture to avoid leaving parts of the old image behind. mTextureUsedWidth = plugin->getWidth(); mTextureUsedHeight = plugin->getHeight(); } return placeholder_image; }