diff options
-rw-r--r-- | libs/hwui/Extensions.h | 65 | ||||
-rw-r--r-- | libs/hwui/FontRenderer.h | 12 | ||||
-rw-r--r-- | libs/hwui/OpenGLRenderer.h | 3 | ||||
-rw-r--r-- | libs/hwui/TextureCache.cpp | 5 |
4 files changed, 79 insertions, 6 deletions
diff --git a/libs/hwui/Extensions.h b/libs/hwui/Extensions.h new file mode 100644 index 0000000..c3d2448 --- /dev/null +++ b/libs/hwui/Extensions.h @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2010 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. + */ + +#define LOG_TAG "OpenGLRenderer" + +#ifndef ANDROID_UI_EXTENSIONS_H +#define ANDROID_UI_EXTENSIONS_H + +#include <utils/SortedVector.h> +#include <utils/String8.h> + +#include <GLES2/gl2.h> +#include <GLES2/gl2ext.h> + +namespace android { +namespace uirenderer { + +class Extensions { +public: + Extensions() { + const char* buffer = (const char*) glGetString(GL_EXTENSIONS); + const char* current = buffer; + const char* head = current; + do { + head = strchr(current, ' '); + String8 s(current, head ? head - current : strlen(current)); + if (s.length()) { + mExtensionList.add(s); + } + current = head + 1; + } while (head); + + mHasNPot = hasExtension("GL_OES_texture_npot"); + } + + inline bool hasNPot() const { return mHasNPot; } + + bool hasExtension(const char* extension) const { + const String8 s(extension); + return mExtensionList.indexOf(s) >= 0; + } + +private: + SortedVector<String8> mExtensionList; + + bool mHasNPot; +}; // class Extensions + +}; // namespace uirenderer +}; // namespace android + +#endif // ANDROID_UI_EXTENSIONS_H diff --git a/libs/hwui/FontRenderer.h b/libs/hwui/FontRenderer.h index b73a96e..3d4d49c 100644 --- a/libs/hwui/FontRenderer.h +++ b/libs/hwui/FontRenderer.h @@ -43,10 +43,8 @@ public: static Font* create(FontRenderer* state, uint32_t fontId, float fontSize); protected: - friend class FontRenderer; - void invalidateTextureCache(); struct CachedGlyphInfo { // Has the cache been invalidated? bool mIsValid; @@ -68,17 +66,19 @@ protected: uint32_t mBitmapTop; }; - FontRenderer* mState; - uint32_t mFontId; - float mFontSize; - Font(FontRenderer* state, uint32_t fontId, float fontSize); DefaultKeyedVector<int32_t, CachedGlyphInfo*> mCachedGlyphs; + void invalidateTextureCache(); + CachedGlyphInfo *cacheGlyph(SkPaint* paint, int32_t glyph); void updateGlyphCache(SkPaint* paint, const SkGlyph& skiaGlyph, CachedGlyphInfo *glyph); void drawCachedGlyph(CachedGlyphInfo *glyph, int x, int y); + + FontRenderer* mState; + uint32_t mFontId; + float mFontSize; }; class FontRenderer { diff --git a/libs/hwui/OpenGLRenderer.h b/libs/hwui/OpenGLRenderer.h index b82366b..6d30282 100644 --- a/libs/hwui/OpenGLRenderer.h +++ b/libs/hwui/OpenGLRenderer.h @@ -40,6 +40,7 @@ #include "PatchCache.h" #include "Vertex.h" #include "FontRenderer.h" +#include "Extensions.h" namespace android { namespace uirenderer { @@ -369,6 +370,8 @@ private: LayerCache mLayerCache; GradientCache mGradientCache; PatchCache mPatchCache; + + Extensions mExtensions; }; // class OpenGLRenderer }; // namespace uirenderer diff --git a/libs/hwui/TextureCache.cpp b/libs/hwui/TextureCache.cpp index ff9e2af..4975edb 100644 --- a/libs/hwui/TextureCache.cpp +++ b/libs/hwui/TextureCache.cpp @@ -128,6 +128,11 @@ void TextureCache::generateTexture(SkBitmap* bitmap, Texture* texture, bool rege glPixelStorei(GL_UNPACK_ALIGNMENT, bitmap->bytesPerPixel()); switch (bitmap->getConfig()) { + case SkBitmap::kA8_Config: + texture->blend = true; + glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, bitmap->rowBytesAsPixels(), texture->height, 0, + GL_ALPHA, GL_UNSIGNED_BYTE, bitmap->getPixels()); + break; case SkBitmap::kRGB_565_Config: texture->blend = false; glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, bitmap->rowBytesAsPixels(), texture->height, 0, |