diff options
author | Nicolas Roard <nicolas@android.com> | 2011-03-07 11:14:44 -0800 |
---|---|---|
committer | Nicolas Roard <nicolasroard@google.com> | 2011-03-08 18:55:55 -0800 |
commit | 67e4aa15702646d5ff50e9524f4e63eb9ed20122 (patch) | |
tree | 054c51b8413613ea13248dad4fae47f1bd4f2426 /WebCore/platform/graphics/android/BackedDoubleBufferedTexture.cpp | |
parent | deb796f509e2ad13b4ef4c01b1a1e707b4e762ee (diff) | |
download | external_webkit-67e4aa15702646d5ff50e9524f4e63eb9ed20122.zip external_webkit-67e4aa15702646d5ff50e9524f4e63eb9ed20122.tar.gz external_webkit-67e4aa15702646d5ff50e9524f4e63eb9ed20122.tar.bz2 |
Partial invalidation of the browser textures
bug:3461349 bug:3464483
Change-Id: I627f06d0fe48aaa0adca65cd13dc738af87eeefc
Diffstat (limited to 'WebCore/platform/graphics/android/BackedDoubleBufferedTexture.cpp')
-rw-r--r-- | WebCore/platform/graphics/android/BackedDoubleBufferedTexture.cpp | 46 |
1 files changed, 43 insertions, 3 deletions
diff --git a/WebCore/platform/graphics/android/BackedDoubleBufferedTexture.cpp b/WebCore/platform/graphics/android/BackedDoubleBufferedTexture.cpp index 7cfa480..470ecf1 100644 --- a/WebCore/platform/graphics/android/BackedDoubleBufferedTexture.cpp +++ b/WebCore/platform/graphics/android/BackedDoubleBufferedTexture.cpp @@ -42,8 +42,6 @@ BackedDoubleBufferedTexture::BackedDoubleBufferedTexture(uint32_t w, uint32_t h, SkBitmap* bitmap, SkBitmap::Config config) : DoubleBufferedTexture(eglGetCurrentContext()) - , m_x(-1) - , m_y(-1) , m_usedLevel(-1) , m_config(config) , m_owner(0) @@ -147,6 +145,21 @@ bool BackedDoubleBufferedTexture::busy() return m_busy; } +bool BackedDoubleBufferedTexture::textureExist(TextureInfo* textureInfo) +{ + if (!m_bitmap) + return false; + + if (!m_bitmap->width() || !m_bitmap->height()) + return false; + + if (textureInfo->m_width == m_bitmap->width() && + textureInfo->m_height == m_bitmap->height()) + return true; + + return false; +} + void BackedDoubleBufferedTexture::producerUpdate(TextureInfo* textureInfo) { if (!m_bitmap) @@ -158,7 +171,7 @@ void BackedDoubleBufferedTexture::producerUpdate(TextureInfo* textureInfo) return; } - if (textureInfo->m_width == m_bitmap->width() && textureInfo->m_height == m_bitmap->height()) + if (textureExist(textureInfo)) GLUtils::updateTextureWithBitmap(textureInfo->m_textureId, *m_bitmap); else { GLUtils::createTextureWithBitmap(textureInfo->m_textureId, *m_bitmap); @@ -227,4 +240,31 @@ bool BackedDoubleBufferedTexture::release(TextureOwner* owner) return false; } +void BackedDoubleBufferedTexture::setTile(TextureInfo* info, int x, int y, + float scale, unsigned int pictureCount) +{ + TextureTileInfo* textureInfo = m_texturesInfo.get(getWriteableTexture()); + if (!textureInfo) { + textureInfo = new TextureTileInfo(); + } + textureInfo->m_x = x; + textureInfo->m_y = y; + textureInfo->m_scale = scale; + textureInfo->m_picture = pictureCount; + m_texturesInfo.set(getWriteableTexture(), textureInfo); +} + +bool BackedDoubleBufferedTexture::readyFor(BaseTile* baseTile) +{ + TextureTileInfo* info = m_texturesInfo.get(getReadableTexture()); + if (info && + (info->m_x == baseTile->x()) && + (info->m_y == baseTile->y()) && + (info->m_scale == baseTile->scale()) && + (info->m_picture == baseTile->lastPaintedPicture())) { + return true; + } + return false; +} + } // namespace WebCore |