1b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy/* 2b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy * Copyright (C) 2010 The Android Open Source Project 3b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy * 4b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy * Licensed under the Apache License, Version 2.0 (the "License"); 5b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy * you may not use this file except in compliance with the License. 6b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy * You may obtain a copy of the License at 7b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy * 8b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy * http://www.apache.org/licenses/LICENSE-2.0 9b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy * 10b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy * Unless required by applicable law or agreed to in writing, software 11b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy * distributed under the License is distributed on an "AS IS" BASIS, 12b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy * See the License for the specific language governing permissions and 14b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy * limitations under the License. 15b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy */ 16b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy 175b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#ifndef ANDROID_HWUI_GAMMA_FONT_RENDERER_H 185b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#define ANDROID_HWUI_GAMMA_FONT_RENDERER_H 19b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy 20b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy#include "FontRenderer.h" 21baf29e7cf433624687c9d6b3bac180d33add8e0fsergeyv 22b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guynamespace android { 23b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guynamespace uirenderer { 24b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy 25b1d0a4ed21168fefcb82232c8f22cb95d60acb85Romain Guyclass GammaFontRenderer { 26b1d0a4ed21168fefcb82232c8f22cb95d60acb85Romain Guypublic: 27b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy GammaFontRenderer(); 28eca0ca2424afc1e98912405906edfc32f7733e16Romain Guy 29c08820f587ad94698691a6657e87712de07e484cChris Craik void clear() { 30f636e63c44fb9d9a299908f1d88da8e0a02d019cJohn Reck mRenderer.reset(nullptr); 316e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy } 326e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy 33c08820f587ad94698691a6657e87712de07e484cChris Craik void flush() { 346e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy if (mRenderer) { 356e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy mRenderer->flushLargeCaches(); 366e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy } 376e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy } 386e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy 39c08820f587ad94698691a6657e87712de07e484cChris Craik FontRenderer& getFontRenderer() { 406e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy if (!mRenderer) { 41253f2c213f6ecda63b6872aee77bd30d5ec07c82Romain Guy const uint8_t* table = nullptr; 42253f2c213f6ecda63b6872aee77bd30d5ec07c82Romain Guy#ifndef ANDROID_ENABLE_LINEAR_BLENDING 43253f2c213f6ecda63b6872aee77bd30d5ec07c82Romain Guy table = &mGammaTable[0]; 44253f2c213f6ecda63b6872aee77bd30d5ec07c82Romain Guy#endif 45253f2c213f6ecda63b6872aee77bd30d5ec07c82Romain Guy mRenderer.reset(new FontRenderer(table)); 466e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy } 476e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy return *mRenderer; 486e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy } 496e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy 50baf29e7cf433624687c9d6b3bac180d33add8e0fsergeyv void dumpMemoryUsage(String8& log) const { 51baf29e7cf433624687c9d6b3bac180d33add8e0fsergeyv if (mRenderer) { 52baf29e7cf433624687c9d6b3bac180d33add8e0fsergeyv mRenderer->dumpMemoryUsage(log); 53baf29e7cf433624687c9d6b3bac180d33add8e0fsergeyv } else { 54baf29e7cf433624687c9d6b3bac180d33add8e0fsergeyv log.appendFormat("FontRenderer doesn't exist.\n"); 55baf29e7cf433624687c9d6b3bac180d33add8e0fsergeyv } 56baf29e7cf433624687c9d6b3bac180d33add8e0fsergeyv } 57baf29e7cf433624687c9d6b3bac180d33add8e0fsergeyv 58baf29e7cf433624687c9d6b3bac180d33add8e0fsergeyv uint32_t getSize() const { 59baf29e7cf433624687c9d6b3bac180d33add8e0fsergeyv return mRenderer ? mRenderer->getSize() : 0; 606e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy } 616e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy 62c08820f587ad94698691a6657e87712de07e484cChris Craik void endPrecaching(); 63cf51a4199835e9604aa4c8b3854306f8fbabbf33Romain Guy 646e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guyprivate: 65c08820f587ad94698691a6657e87712de07e484cChris Craik std::unique_ptr<FontRenderer> mRenderer; 66253f2c213f6ecda63b6872aee77bd30d5ec07c82Romain Guy#ifndef ANDROID_ENABLE_LINEAR_BLENDING 676e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy uint8_t mGammaTable[256]; 68253f2c213f6ecda63b6872aee77bd30d5ec07c82Romain Guy#endif 69b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy}; 70b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy 71b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy}; // namespace uirenderer 72b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy}; // namespace android 73b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy 745b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#endif // ANDROID_HWUI_GAMMA_FONT_RENDERER_H 75