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
291bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck    void clear() { mRenderer.reset(nullptr); }
306e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy
31c08820f587ad94698691a6657e87712de07e484cChris Craik    void flush() {
326e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy        if (mRenderer) {
336e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy            mRenderer->flushLargeCaches();
346e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy        }
356e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy    }
366e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy
37c08820f587ad94698691a6657e87712de07e484cChris Craik    FontRenderer& getFontRenderer() {
386e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy        if (!mRenderer) {
39253f2c213f6ecda63b6872aee77bd30d5ec07c82Romain Guy            const uint8_t* table = nullptr;
40253f2c213f6ecda63b6872aee77bd30d5ec07c82Romain Guy#ifndef ANDROID_ENABLE_LINEAR_BLENDING
41253f2c213f6ecda63b6872aee77bd30d5ec07c82Romain Guy            table = &mGammaTable[0];
42253f2c213f6ecda63b6872aee77bd30d5ec07c82Romain Guy#endif
43253f2c213f6ecda63b6872aee77bd30d5ec07c82Romain Guy            mRenderer.reset(new FontRenderer(table));
446e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy        }
456e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy        return *mRenderer;
466e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy    }
476e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy
48baf29e7cf433624687c9d6b3bac180d33add8e0fsergeyv    void dumpMemoryUsage(String8& log) const {
49baf29e7cf433624687c9d6b3bac180d33add8e0fsergeyv        if (mRenderer) {
50baf29e7cf433624687c9d6b3bac180d33add8e0fsergeyv            mRenderer->dumpMemoryUsage(log);
51baf29e7cf433624687c9d6b3bac180d33add8e0fsergeyv        } else {
52baf29e7cf433624687c9d6b3bac180d33add8e0fsergeyv            log.appendFormat("FontRenderer doesn't exist.\n");
53baf29e7cf433624687c9d6b3bac180d33add8e0fsergeyv        }
54baf29e7cf433624687c9d6b3bac180d33add8e0fsergeyv    }
55baf29e7cf433624687c9d6b3bac180d33add8e0fsergeyv
561bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck    uint32_t getSize() const { return mRenderer ? mRenderer->getSize() : 0; }
576e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy
58c08820f587ad94698691a6657e87712de07e484cChris Craik    void endPrecaching();
59cf51a4199835e9604aa4c8b3854306f8fbabbf33Romain Guy
606e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guyprivate:
61c08820f587ad94698691a6657e87712de07e484cChris Craik    std::unique_ptr<FontRenderer> mRenderer;
62253f2c213f6ecda63b6872aee77bd30d5ec07c82Romain Guy#ifndef ANDROID_ENABLE_LINEAR_BLENDING
636e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy    uint8_t mGammaTable[256];
64253f2c213f6ecda63b6872aee77bd30d5ec07c82Romain Guy#endif
65b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy};
66b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy
671bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck};  // namespace uirenderer
681bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck};  // namespace android
69b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy
701bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck#endif  // ANDROID_HWUI_GAMMA_FONT_RENDERER_H
71