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"
214121063313ac0d6f69f6253cac821d0c1c122086Romain Guy#include "Program.h"
22b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy
23c08820f587ad94698691a6657e87712de07e484cChris Craik#include <SkPaint.h>
24c08820f587ad94698691a6657e87712de07e484cChris Craik
25b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guynamespace android {
26b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guynamespace uirenderer {
27b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy
28b1d0a4ed21168fefcb82232c8f22cb95d60acb85Romain Guyclass GammaFontRenderer {
29b1d0a4ed21168fefcb82232c8f22cb95d60acb85Romain Guypublic:
30b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy    GammaFontRenderer();
31eca0ca2424afc1e98912405906edfc32f7733e16Romain Guy
32c08820f587ad94698691a6657e87712de07e484cChris Craik    void clear() {
33f636e63c44fb9d9a299908f1d88da8e0a02d019cJohn Reck        mRenderer.reset(nullptr);
346e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy    }
356e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy
36c08820f587ad94698691a6657e87712de07e484cChris Craik    void flush() {
376e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy        if (mRenderer) {
386e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy            mRenderer->flushLargeCaches();
396e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy        }
406e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy    }
416e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy
42c08820f587ad94698691a6657e87712de07e484cChris Craik    FontRenderer& getFontRenderer() {
436e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy        if (!mRenderer) {
44c08820f587ad94698691a6657e87712de07e484cChris Craik            mRenderer.reset(new FontRenderer(&mGammaTable[0]));
456e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy        }
466e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy        return *mRenderer;
476e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy    }
486e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy
49c08820f587ad94698691a6657e87712de07e484cChris Craik    uint32_t getFontRendererSize(GLenum format) const {
501e546815bbb736c50679a8aefc25f48561026fc5Victoria Lease        return mRenderer ? mRenderer->getCacheSize(format) : 0;
516e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy    }
526e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy
53c08820f587ad94698691a6657e87712de07e484cChris Craik    void endPrecaching();
54cf51a4199835e9604aa4c8b3854306f8fbabbf33Romain Guy
556e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guyprivate:
56c08820f587ad94698691a6657e87712de07e484cChris Craik    std::unique_ptr<FontRenderer> mRenderer;
576e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy    uint8_t mGammaTable[256];
58b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy};
59b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy
60b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy}; // namespace uirenderer
61b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy}; // namespace android
62b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy
635b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#endif // ANDROID_HWUI_GAMMA_FONT_RENDERER_H
64