Track texture memory globally
Also mostly consolidates texture creation
Change-Id: Ifea01303afda531dcec99b8fe2a0f64cf2f24420
diff --git a/libs/hwui/font/CacheTexture.cpp b/libs/hwui/font/CacheTexture.cpp
index d2685da..8ba4761 100644
--- a/libs/hwui/font/CacheTexture.cpp
+++ b/libs/hwui/font/CacheTexture.cpp
@@ -111,11 +111,11 @@
CacheTexture::CacheTexture(uint16_t width, uint16_t height, GLenum format, uint32_t maxQuadCount)
: mTexture(Caches::getInstance())
+ , mWidth(width)
+ , mHeight(height)
, mFormat(format)
, mMaxQuadCount(maxQuadCount)
, mCaches(Caches::getInstance()) {
- mTexture.width = width;
- mTexture.height = height;
mTexture.blend = true;
mCacheBlocks = new CacheBlock(TEXTURE_BORDER_SIZE, TEXTURE_BORDER_SIZE,
@@ -160,10 +160,7 @@
delete mPixelBuffer;
mPixelBuffer = nullptr;
}
- if (mTexture.id) {
- mCaches.textureState().deleteTexture(mTexture.id);
- mTexture.id = 0;
- }
+ mTexture.deleteTexture();
mDirty = false;
mCurrentQuad = 0;
}
@@ -183,22 +180,9 @@
mPixelBuffer = PixelBuffer::create(mFormat, getWidth(), getHeight());
}
- if (!mTexture.id) {
- glGenTextures(1, &mTexture.id);
-
- mCaches.textureState().bindTexture(mTexture.id);
- glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
- // Initialize texture dimensions
- glTexImage2D(GL_TEXTURE_2D, 0, mFormat, getWidth(), getHeight(), 0,
- mFormat, GL_UNSIGNED_BYTE, nullptr);
-
- const GLenum filtering = getLinearFiltering() ? GL_LINEAR : GL_NEAREST;
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filtering);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filtering);
-
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
- }
+ mTexture.resize(mWidth, mHeight, mFormat);
+ mTexture.setFilter(getLinearFiltering() ? GL_LINEAR : GL_NEAREST);
+ mTexture.setWrap(GL_CLAMP_TO_EDGE);
}
bool CacheTexture::upload() {
diff --git a/libs/hwui/font/CacheTexture.h b/libs/hwui/font/CacheTexture.h
index 6dabc76..5510666 100644
--- a/libs/hwui/font/CacheTexture.h
+++ b/libs/hwui/font/CacheTexture.h
@@ -92,11 +92,11 @@
bool fitBitmap(const SkGlyph& glyph, uint32_t* retOriginX, uint32_t* retOriginY);
inline uint16_t getWidth() const {
- return mTexture.width;
+ return mWidth;
}
inline uint16_t getHeight() const {
- return mTexture.height;
+ return mHeight;
}
inline GLenum getFormat() const {
@@ -122,7 +122,7 @@
GLuint getTextureId() {
allocatePixelBuffer();
- return mTexture.id;
+ return mTexture.id();
}
inline bool isDirty() const {
@@ -183,6 +183,7 @@
PixelBuffer* mPixelBuffer = nullptr;
Texture mTexture;
+ uint32_t mWidth, mHeight;
GLenum mFormat;
bool mLinearFiltering = false;
bool mDirty = false;