GammaFontRenderer.h revision 253f2c213f6ecda63b6872aee77bd30d5ec07c82
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