summaryrefslogtreecommitdiff
path: root/Source/WebCore/platform/graphics/chromium/ManagedTexture.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/platform/graphics/chromium/ManagedTexture.cpp')
-rw-r--r--Source/WebCore/platform/graphics/chromium/ManagedTexture.cpp35
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)