Bug 1415020 - Deallocate device data of TextureImageTextureSourceOGL during destroying CompositorOGL r=nical

This commit is contained in:
sotaro
2018-12-11 17:54:14 +09:00
parent 5f7f8cbbc4
commit 2bb3230ce2
6 changed files with 89 additions and 7 deletions

View File

@@ -103,6 +103,33 @@ static gl::TextureImage::Flags FlagsToGLFlags(TextureFlags aFlags) {
return static_cast<gl::TextureImage::Flags>(result);
}
TextureImageTextureSourceOGL::TextureImageTextureSourceOGL(
CompositorOGL* aCompositor, TextureFlags aFlags)
: mGL(aCompositor->gl()),
mCompositor(aCompositor),
mFlags(aFlags),
mIterating(false)
{
if (mCompositor) {
mCompositor->RegisterTextureSource(this);
}
}
TextureImageTextureSourceOGL::~TextureImageTextureSourceOGL()
{
DeallocateDeviceData();
}
void TextureImageTextureSourceOGL::DeallocateDeviceData()
{
mTexImage = nullptr;
mGL = nullptr;
if (mCompositor) {
mCompositor->UnregisterTextureSource(this);
}
SetUpdateSerial(0);
}
bool TextureImageTextureSourceOGL::Update(gfx::DataSourceSurface* aSurface,
nsIntRegion* aDestRegion,
gfx::IntPoint* aSrcOffset) {
@@ -180,6 +207,17 @@ void TextureImageTextureSourceOGL::SetTextureSourceProvider(
DeallocateDeviceData();
}
mGL = newGL;
CompositorOGL* compositor = aProvider ? aProvider->AsCompositorOGL() : nullptr;
if (mCompositor != compositor) {
if (mCompositor) {
mCompositor->UnregisterTextureSource(this);
}
if (compositor) {
compositor->RegisterTextureSource(this);
}
mCompositor = compositor;
}
}
gfx::IntSize TextureImageTextureSourceOGL::GetSize() const {