diff options
Diffstat (limited to 'Source/WebCore/platform/graphics/chromium/ManagedTexture.cpp')
-rw-r--r-- | Source/WebCore/platform/graphics/chromium/ManagedTexture.cpp | 35 |
1 files changed, 30 insertions, 5 deletions
diff --git a/Source/WebCore/platform/graphics/chromium/ManagedTexture.cpp b/Source/WebCore/platform/graphics/chromium/ManagedTexture.cpp index 5bb19fa87..9bc700dc9 100644 --- a/Source/WebCore/platform/graphics/chromium/ManagedTexture.cpp +++ b/Source/WebCore/platform/graphics/chromium/ManagedTexture.cpp @@ -39,6 +39,7 @@ ManagedTexture::ManagedTexture(TextureManager* manager) , m_format(0) , m_textureId(0) { + m_textureManager->registerTexture(this); } ManagedTexture::ManagedTexture(TextureManager* manager, TextureToken token, IntSize size, unsigned format, unsigned textureId) @@ -48,21 +49,41 @@ ManagedTexture::ManagedTexture(TextureManager* manager, TextureToken token, IntS , m_format(format) , m_textureId(textureId) { + m_textureManager->registerTexture(this); } ManagedTexture::~ManagedTexture() { + if (!m_textureManager) + return; + m_textureManager->unregisterTexture(this); if (m_token) m_textureManager->releaseToken(m_token); } +void ManagedTexture::setTextureManager(TextureManager* manager) +{ + if (manager == m_textureManager) + return; + + if (m_textureManager) + m_textureManager->unregisterTexture(this); + m_textureManager = manager; + clear(); + if (m_textureManager) + m_textureManager->registerTexture(this); +} + bool ManagedTexture::isValid(const IntSize& size, unsigned format) { - return m_token && size == m_size && format == m_format && m_textureManager->hasTexture(m_token); + return m_token && size == m_size && format == m_format && m_textureManager && m_textureManager->hasTexture(m_token); } bool ManagedTexture::reserve(const IntSize& size, unsigned format) { + if (!m_textureManager) + return false; + if (!m_token) m_token = m_textureManager->getToken(); @@ -71,7 +92,7 @@ bool ManagedTexture::reserve(const IntSize& size, unsigned format) m_textureManager->protectTexture(m_token); else { m_textureId = 0; - reserved = m_textureManager->requestTexture(m_token, size, format, m_textureId); + reserved = m_textureManager->requestTexture(m_token, size, format); if (reserved) { m_size = size; m_format = format; @@ -83,7 +104,7 @@ bool ManagedTexture::reserve(const IntSize& size, unsigned format) void ManagedTexture::unreserve() { - if (!m_token) + if (!m_token || !m_textureManager) return; m_textureManager->unprotectTexture(m_token); @@ -111,14 +132,18 @@ void ManagedTexture::framebufferTexture2D(GraphicsContext3D* context, TextureAll PassOwnPtr<ManagedTexture> ManagedTexture::steal() { OwnPtr<ManagedTexture> texture = adoptPtr(new ManagedTexture(m_textureManager, m_token, m_size, m_format, m_textureId)); + clear(); + return texture.release(); +} + +void ManagedTexture::clear() +{ m_token = 0; m_size = IntSize(); m_format = 0; m_textureId = 0; - return texture.release(); } - } #endif // USE(ACCELERATED_COMPOSITING) |