summaryrefslogtreecommitdiff
path: root/libs/hwui/font/CacheTexture.h
diff options
context:
space:
mode:
Diffstat (limited to 'libs/hwui/font/CacheTexture.h')
-rw-r--r--libs/hwui/font/CacheTexture.h173
1 files changed, 0 insertions, 173 deletions
diff --git a/libs/hwui/font/CacheTexture.h b/libs/hwui/font/CacheTexture.h
deleted file mode 100644
index 654378eeb47e..000000000000
--- a/libs/hwui/font/CacheTexture.h
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef ANDROID_HWUI_CACHE_TEXTURE_H
-#define ANDROID_HWUI_CACHE_TEXTURE_H
-
-#include "PixelBuffer.h"
-#include "Rect.h"
-#include "Texture.h"
-#include "Vertex.h"
-
-#include <GLES3/gl3.h>
-#include <SkGlyph.h>
-#include <utils/Log.h>
-
-namespace android {
-namespace uirenderer {
-
-class Caches;
-
-/**
- * CacheBlock is a node in a linked list of current free space areas in a CacheTexture.
- * Using CacheBlocks enables us to pack the cache from top to bottom as well as left to right.
- * When we add a glyph to the cache, we see if it fits within one of the existing columns that
- * have already been started (this is the case if the glyph fits vertically as well as
- * horizontally, and if its width is sufficiently close to the column width to avoid
- * sub-optimal packing of small glyphs into wide columns). If there is no column in which the
- * glyph fits, we check the final node, which is the remaining space in the cache, creating
- * a new column as appropriate.
- *
- * As columns fill up, we remove their CacheBlock from the list to avoid having to check
- * small blocks in the future.
- */
-struct CacheBlock {
- uint16_t mX;
- uint16_t mY;
- uint16_t mWidth;
- uint16_t mHeight;
- CacheBlock* mNext;
- CacheBlock* mPrev;
-
- CacheBlock(uint16_t x, uint16_t y, uint16_t width, uint16_t height)
- : mX(x), mY(y), mWidth(width), mHeight(height), mNext(nullptr), mPrev(nullptr) {}
-
- static CacheBlock* insertBlock(CacheBlock* head, CacheBlock* newBlock);
- static CacheBlock* removeBlock(CacheBlock* head, CacheBlock* blockToRemove);
-
- void output() {
- CacheBlock* currBlock = this;
- while (currBlock) {
- ALOGD("Block: this, x, y, w, h = %p, %d, %d, %d, %d", currBlock, currBlock->mX,
- currBlock->mY, currBlock->mWidth, currBlock->mHeight);
- currBlock = currBlock->mNext;
- }
- }
-};
-
-class CacheTexture {
-public:
- CacheTexture(uint16_t width, uint16_t height, GLenum format, uint32_t maxQuadCount);
- ~CacheTexture();
-
- void reset();
- void init();
-
- void releaseMesh();
- void releasePixelBuffer();
-
- void allocatePixelBuffer();
- void allocateMesh();
-
- // Returns true if glPixelStorei(GL_UNPACK_ROW_LENGTH) must be reset
- // This method will also call setDirty(false)
- bool upload();
-
- bool fitBitmap(const SkGlyph& glyph, uint32_t* retOriginX, uint32_t* retOriginY);
-
- inline uint16_t getWidth() const { return mWidth; }
-
- inline uint16_t getHeight() const { return mHeight; }
-
- inline GLenum getFormat() const { return mFormat; }
-
- inline uint32_t getOffset(uint16_t x, uint16_t y) const {
- return (y * getWidth() + x) * PixelBuffer::formatSize(mFormat);
- }
-
- inline const Rect* getDirtyRect() const { return &mDirtyRect; }
-
- inline PixelBuffer* getPixelBuffer() const { return mPixelBuffer; }
-
- Texture& getTexture() {
- allocatePixelBuffer();
- return mTexture;
- }
-
- GLuint getTextureId() {
- allocatePixelBuffer();
- return mTexture.id();
- }
-
- inline bool isDirty() const { return mDirty; }
-
- inline bool getLinearFiltering() const { return mLinearFiltering; }
-
- /**
- * This method assumes that the proper texture unit is active.
- */
- void setLinearFiltering(bool linearFiltering);
-
- inline uint16_t getGlyphCount() const { return mNumGlyphs; }
-
- TextureVertex* mesh() const { return mMesh; }
-
- uint32_t meshElementCount() const { return mCurrentQuad * 6; }
-
- uint16_t* indices() const { return (uint16_t*)nullptr; }
-
- void resetMesh() { mCurrentQuad = 0; }
-
- inline void addQuad(float x1, float y1, float u1, float v1, float x2, float y2, float u2,
- float v2, float x3, float y3, float u3, float v3, float x4, float y4,
- float u4, float v4) {
- TextureVertex* mesh = mMesh + mCurrentQuad * 4;
- TextureVertex::set(mesh++, x2, y2, u2, v2);
- TextureVertex::set(mesh++, x3, y3, u3, v3);
- TextureVertex::set(mesh++, x1, y1, u1, v1);
- TextureVertex::set(mesh++, x4, y4, u4, v4);
- mCurrentQuad++;
- }
-
- bool canDraw() const { return mCurrentQuad > 0; }
-
- bool endOfMesh() const { return mCurrentQuad == mMaxQuadCount; }
-
- uint32_t calculateFreeMemory() const;
-
-private:
- void setDirty(bool dirty);
-
- PixelBuffer* mPixelBuffer = nullptr;
- Texture mTexture;
- uint32_t mWidth, mHeight;
- GLenum mFormat;
- bool mLinearFiltering = false;
- bool mDirty = false;
- uint16_t mNumGlyphs = 0;
- TextureVertex* mMesh = nullptr;
- uint32_t mCurrentQuad = 0;
- uint32_t mMaxQuadCount;
- Caches& mCaches;
- CacheBlock* mCacheBlocks;
- bool mHasUnpackRowLength;
- Rect mDirtyRect;
-};
-
-}; // namespace uirenderer
-}; // namespace android
-
-#endif // ANDROID_HWUI_CACHE_TEXTURE_H