rsFont.h revision a6dd823b9dcbd7ce7dfc34eda52a1e4104771f79
16f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski/* 26f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Copyright (C) 2009 The Android Open Source Project 36f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * 46f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Licensed under the Apache License, Version 2.0 (the "License"); 56f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * you may not use this file except in compliance with the License. 66f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * You may obtain a copy of the License at 76f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * 86f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * http://www.apache.org/licenses/LICENSE-2.0 96f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * 106f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Unless required by applicable law or agreed to in writing, software 116f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * distributed under the License is distributed on an "AS IS" BASIS, 126f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * See the License for the specific language governing permissions and 146f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * limitations under the License. 156f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski */ 166f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 176f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#ifndef ANDROID_RS_FONT_H 18ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski#define ANDROID_RS_FONT_H 19ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski 20ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski#include "rsStream.h" 21ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski#include <utils/String8.h> 226f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#include <utils/Vector.h> 231ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski#include <utils/KeyedVector.h> 246f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 25d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinskistruct FT_LibraryRec_; 26467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinskistruct FT_FaceRec_; 276f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskistruct FT_Bitmap_; 2890919978e7ccf7dc25622e9d039a7e87ebe7ba11Adam Lesinski 29e597d68d33c76c2b830f5497ed4ba74c5193a056Adam Lesinski// --------------------------------------------------------------------------- 30e597d68d33c76c2b830f5497ed4ba74c5193a056Adam Lesinskinamespace android { 31e597d68d33c76c2b830f5497ed4ba74c5193a056Adam Lesinski 3290919978e7ccf7dc25622e9d039a7e87ebe7ba11Adam Lesinskinamespace renderscript { 33d5083f6f6b9bc76bbe64052bcec639eee752a321Adam Lesinski 346f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski// Gamma (>= 1.0, <= 10.0) 356f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#define PROPERTY_TEXT_GAMMA "ro.text_gamma" 3690919978e7ccf7dc25622e9d039a7e87ebe7ba11Adam Lesinski#define PROPERTY_TEXT_BLACK_GAMMA_THRESHOLD "ro.text_gamma.black_threshold" 376f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#define PROPERTY_TEXT_WHITE_GAMMA_THRESHOLD "ro.text_gamma.white_threshold" 381ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 39ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski#define DEFAULT_TEXT_GAMMA 1.4f 40cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski#define DEFAULT_TEXT_BLACK_GAMMA_THRESHOLD 64 4190919978e7ccf7dc25622e9d039a7e87ebe7ba11Adam Lesinski#define DEFAULT_TEXT_WHITE_GAMMA_THRESHOLD 192 42cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski 43ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinskiclass FontState; 44ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski 45ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinskiclass Font : public ObjectBase { 46769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinskipublic: 47769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski enum RenderMode { 48ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski FRAMEBUFFER, 49ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski BITMAP, 5090919978e7ccf7dc25622e9d039a7e87ebe7ba11Adam Lesinski MEASURE, 5190919978e7ccf7dc25622e9d039a7e87ebe7ba11Adam Lesinski }; 5290919978e7ccf7dc25622e9d039a7e87ebe7ba11Adam Lesinski 531ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski struct Rect { 54ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski int32_t left; 55ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski int32_t top; 56cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski int32_t right; 5752364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski int32_t bottom; 5890919978e7ccf7dc25622e9d039a7e87ebe7ba11Adam Lesinski void set(int32_t l, int32_t r, int32_t t, int32_t b) { 59cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski left = l; 60cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski right = r; 61cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski top = t; 6290919978e7ccf7dc25622e9d039a7e87ebe7ba11Adam Lesinski bottom = b; 6390919978e7ccf7dc25622e9d039a7e87ebe7ba11Adam Lesinski } 64cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski }; 65ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski 66cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski ~Font(); 676f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 68cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski // Currently files do not get serialized, 69cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski // but we need to inherit from ObjectBase for ref tracking 70ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski virtual void serialize(Context *rsc, OStream *stream) const { 71ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski } 72ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski virtual RsA3DClassID getClassId() const { 73ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski return RS_A3D_CLASS_ID_UNKNOWN; 746f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski } 756f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 766f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski static Font * create(Context *rsc, const char *name, float fontSize, uint32_t dpi, 77cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski const void *data = NULL, uint32_t dataLen = 0); 78ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski 796f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskiprotected: 80ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski 81cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski friend class FontState; 82cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski 837542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski // Pointer to the utf data, length of data, where to start, number of glyphs ot read 846f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski // (each glyph may be longer than a char because we are dealing with utf data) 856f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski // Last two variables are the initial pen position 866f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski void renderUTF(const char *text, uint32_t len, int32_t x, int32_t y, 87cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski uint32_t start, int32_t numGlyphs, 88ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski RenderMode mode = FRAMEBUFFER, Rect *bounds = NULL, 896f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski uint8_t *bitmap = NULL, uint32_t bitmapW = 0, uint32_t bitmapH = 0); 90ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski 91cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski void invalidateTextureCache(); 92cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski struct CachedGlyphInfo 937542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski { 946f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski // Has the cache been invalidated? 956f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski bool mIsValid; 969f22204c3a9ddac4f92573c9ab098e6cf3ed1cb4Adam Lesinski // Location of the cached glyph in the bitmap 97cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski // in case we need to resize the texture 98ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski uint32_t mBitmapMinX; 999f22204c3a9ddac4f92573c9ab098e6cf3ed1cb4Adam Lesinski uint32_t mBitmapMinY; 100cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski uint32_t mBitmapWidth; 101ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski uint32_t mBitmapHeight; 1029f22204c3a9ddac4f92573c9ab098e6cf3ed1cb4Adam Lesinski // Also cache texture coords for the quad 1039f22204c3a9ddac4f92573c9ab098e6cf3ed1cb4Adam Lesinski float mBitmapMinU; 1048c3f31f022f7e094fd227ef0c2987e0846cb3e43Adam Lesinski float mBitmapMinV; 105cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski float mBitmapMaxU; 1067542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski float mBitmapMaxV; 107cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski // Minimize how much we call freetype 1088049f3da712ea9c3154b57ce2276c97e749d1f2cAdam Lesinski int32_t mGlyphIndex; 109ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski int32_t mAdvanceX; 1108c3f31f022f7e094fd227ef0c2987e0846cb3e43Adam Lesinski int32_t mAdvanceY; 111ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski // Values below contain a glyph's origin in the bitmap 112cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski int32_t mBitmapLeft; 1138c3f31f022f7e094fd227ef0c2987e0846cb3e43Adam Lesinski int32_t mBitmapTop; 1148049f3da712ea9c3154b57ce2276c97e749d1f2cAdam Lesinski }; 115ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski 1168049f3da712ea9c3154b57ce2276c97e749d1f2cAdam Lesinski String8 mFontName; 1177542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski float mFontSize; 1188c3f31f022f7e094fd227ef0c2987e0846cb3e43Adam Lesinski uint32_t mDpi; 119cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski 120ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski Font(Context *rsc); 1218049f3da712ea9c3154b57ce2276c97e749d1f2cAdam Lesinski bool init(const char *name, float fontSize, uint32_t dpi, const void *data = NULL, uint32_t dataLen = 0); 1228049f3da712ea9c3154b57ce2276c97e749d1f2cAdam Lesinski 1238049f3da712ea9c3154b57ce2276c97e749d1f2cAdam Lesinski virtual void preDestroy() const; 1248049f3da712ea9c3154b57ce2276c97e749d1f2cAdam Lesinski FT_FaceRec_ *mFace; 1258049f3da712ea9c3154b57ce2276c97e749d1f2cAdam Lesinski bool mInitialized; 1268c3f31f022f7e094fd227ef0c2987e0846cb3e43Adam Lesinski bool mHasKerning; 1278c3f31f022f7e094fd227ef0c2987e0846cb3e43Adam Lesinski 1288c3f31f022f7e094fd227ef0c2987e0846cb3e43Adam Lesinski DefaultKeyedVector<uint32_t, CachedGlyphInfo* > mCachedGlyphs; 129cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski CachedGlyphInfo* getCachedUTFChar(int32_t utfChar); 130ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski 1318c3f31f022f7e094fd227ef0c2987e0846cb3e43Adam Lesinski CachedGlyphInfo *cacheGlyph(uint32_t glyph); 132ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski void updateGlyphCache(CachedGlyphInfo *glyph); 133cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski void measureCachedGlyph(CachedGlyphInfo *glyph, int32_t x, int32_t y, Rect *bounds); 134cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski void drawCachedGlyph(CachedGlyphInfo *glyph, int32_t x, int32_t y); 1357542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski void drawCachedGlyph(CachedGlyphInfo *glyph, int32_t x, int32_t y, 1368c3f31f022f7e094fd227ef0c2987e0846cb3e43Adam Lesinski uint8_t *bitmap, uint32_t bitmapW, uint32_t bitmapH); 137cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski}; 138ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski 1398c3f31f022f7e094fd227ef0c2987e0846cb3e43Adam Lesinskiclass FontState { 140ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinskipublic: 141cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski FontState(); 142cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski ~FontState(); 1438c3f31f022f7e094fd227ef0c2987e0846cb3e43Adam Lesinski 1448c3f31f022f7e094fd227ef0c2987e0846cb3e43Adam Lesinski void init(Context *rsc); 1457542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski void deinit(Context *rsc); 1467542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski 1477542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski ObjectBaseRef<Font> mDefault; 1487542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski 1497542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski void renderText(const char *text, uint32_t len, int32_t x, int32_t y, 1507542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski uint32_t startIndex = 0, int numGlyphs = -1, 1517542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski Font::RenderMode mode = Font::FRAMEBUFFER, 1527542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski Font::Rect *bounds = NULL, 1537542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski uint8_t *bitmap = NULL, uint32_t bitmapW = 0, uint32_t bitmapH = 0); 1547542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski 1557542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski void measureText(const char *text, uint32_t len, Font::Rect *bounds); 1567542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski 1577542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski void setFontColor(float r, float g, float b, float a); 1587542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski void getFontColor(float *r, float *g, float *b, float *a) const; 1597542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski 1607542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinskiprotected: 1617542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski 1627542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski float mSurfaceWidth; 1637542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski float mSurfaceHeight; 1647542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski 1657542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski friend class Font; 1667542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski 1677542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski struct CacheTextureLine { 168ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski uint32_t mMaxHeight; 1691ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski uint32_t mMaxWidth; 170ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski uint32_t mCurrentRow; 171cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski uint32_t mCurrentCol; 172cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski bool mDirty; 1737542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski 1747542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski CacheTextureLine(uint32_t maxHeight, uint32_t maxWidth, uint32_t currentRow, uint32_t currentCol) 1757542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski : mMaxHeight(maxHeight), mMaxWidth(maxWidth), mCurrentRow(currentRow), 1767542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski mCurrentCol(currentCol), mDirty(false) { 1777542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski } 1787542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski 1797542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski bool fitBitmap(FT_Bitmap_ *bitmap, uint32_t *retOriginX, uint32_t *retOriginY); 1807542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski }; 1817542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski 1827542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski Vector<CacheTextureLine*> mCacheLines; 1837542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski uint32_t getRemainingCacheCapacity(); 1847542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski 1857542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski void precacheLatin(Font *font); 1867542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski String8 mLatinPrecache; 1877542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski 1887542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski Context *mRSC; 1897542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski 1907542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski struct { 1917542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski float mFontColor[4]; 1927542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski float mGamma; 1937542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski } mConstants; 1947542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski bool mConstantsDirty; 1957542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski 1967542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski float mBlackGamma; 1977542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski float mWhiteGamma; 1987542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski 1997542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski float mBlackThreshold; 2001ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski float mWhiteThreshold; 2011ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 202dfa5e0705ff82f15e228ba076bc192893bcbe118Adam Lesinski // Free type library, we only need one copy 203cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski#ifndef ANDROID_RS_SERIALIZE 204ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski FT_LibraryRec_ *mLibrary; 205cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski FT_LibraryRec_ *getLib(); 206cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski#endif //ANDROID_RS_SERIALIZE 207cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski Vector<Font*> mActiveFonts; 2087542162cb1b1fd2ce8a26dd7f3fedc8de8160d38Adam Lesinski 209cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski // Render state for the font 21090919978e7ccf7dc25622e9d039a7e87ebe7ba11Adam Lesinski ObjectBaseRef<Allocation> mFontShaderFConstant; 21190919978e7ccf7dc25622e9d039a7e87ebe7ba11Adam Lesinski ObjectBaseRef<ProgramFragment> mFontShaderF; 21290919978e7ccf7dc25622e9d039a7e87ebe7ba11Adam Lesinski ObjectBaseRef<Sampler> mFontSampler; 21390919978e7ccf7dc25622e9d039a7e87ebe7ba11Adam Lesinski ObjectBaseRef<ProgramStore> mFontProgramStore; 21490919978e7ccf7dc25622e9d039a7e87ebe7ba11Adam Lesinski void initRenderState(); 215dfa5e0705ff82f15e228ba076bc192893bcbe118Adam Lesinski 216dfa5e0705ff82f15e228ba076bc192893bcbe118Adam Lesinski // Texture to cache glyph bitmaps 217dfa5e0705ff82f15e228ba076bc192893bcbe118Adam Lesinski ObjectBaseRef<Allocation> mTextTexture; 218cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski uint8_t *mCacheBuffer; 219ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski uint32_t mCacheWidth; 220dfa5e0705ff82f15e228ba076bc192893bcbe118Adam Lesinski uint32_t mCacheHeight; 22190919978e7ccf7dc25622e9d039a7e87ebe7ba11Adam Lesinski 222cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski void initTextTexture(); 223cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski 224cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski#ifndef ANDROID_RS_SERIALIZE 225dfa5e0705ff82f15e228ba076bc192893bcbe118Adam Lesinski bool cacheBitmap(FT_Bitmap_ *bitmap, uint32_t *retOriginX, uint32_t *retOriginY); 226dfa5e0705ff82f15e228ba076bc192893bcbe118Adam Lesinski#endif //ANDROID_RS_SERIALIZE 2276f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski const Type* getCacheTextureType() { 228cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski return mTextTexture->getType(); 229cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski } 230cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski 231ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski void flushAllAndInvalidate(); 232cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski 233ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski // Pointer to vertex data to speed up frame to frame work 234cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski float *mTextMeshPtr; 235ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski uint32_t mCurrentQuadIndex; 236cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski uint32_t mMaxNumberOfQuads; 237ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski 238cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski void initVertexArrayBuffers(); 239ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski ObjectBaseRef<Mesh> mMesh; 240cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski 241cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski bool mInitialized; 242cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski 243cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski void checkInit(); 244cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski 245cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski void issueDrawCommand(); 24690919978e7ccf7dc25622e9d039a7e87ebe7ba11Adam Lesinski 247ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski void appendMeshQuad(float x1, float y1, float z1, 24890919978e7ccf7dc25622e9d039a7e87ebe7ba11Adam Lesinski float u1, float v1, 24990919978e7ccf7dc25622e9d039a7e87ebe7ba11Adam Lesinski float x2, float y2, float z2, 25090919978e7ccf7dc25622e9d039a7e87ebe7ba11Adam Lesinski float u2, float v2, 25190919978e7ccf7dc25622e9d039a7e87ebe7ba11Adam Lesinski float x3, float y3, float z3, 25290919978e7ccf7dc25622e9d039a7e87ebe7ba11Adam Lesinski float u3, float v3, 253ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski float x4, float y4, float z4, 25452364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski float u4, float v4); 25590919978e7ccf7dc25622e9d039a7e87ebe7ba11Adam Lesinski}; 25690919978e7ccf7dc25622e9d039a7e87ebe7ba11Adam Lesinski 25790919978e7ccf7dc25622e9d039a7e87ebe7ba11Adam Lesinski} 25852364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski} 259ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski 260ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski#endif 261ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski