Caches.h revision 746b7401ceb86b5f2805f8c0d3b39ac739152015
1fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy/*
2fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy * Copyright (C) 2010 The Android Open Source Project
3fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy *
4fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy * Licensed under the Apache License, Version 2.0 (the "License");
5fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy * you may not use this file except in compliance with the License.
6fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy * You may obtain a copy of the License at
7fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy *
8fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy *      http://www.apache.org/licenses/LICENSE-2.0
9fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy *
10fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy * Unless required by applicable law or agreed to in writing, software
11fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy * distributed under the License is distributed on an "AS IS" BASIS,
12fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy * See the License for the specific language governing permissions and
14fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy * limitations under the License.
15fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy */
16fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy
17fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy#ifndef ANDROID_UI_CACHES_H
18fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy#define ANDROID_UI_CACHES_H
19fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy
20a2341a9f6addcd79723965ec5b1a1c5ae0f8bd65Romain Guy#ifndef LOG_TAG
21a2341a9f6addcd79723965ec5b1a1c5ae0f8bd65Romain Guy    #define LOG_TAG "OpenGLRenderer"
22a2341a9f6addcd79723965ec5b1a1c5ae0f8bd65Romain Guy#endif
23fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy
24fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy#include <utils/Singleton.h>
25fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy
26746b7401ceb86b5f2805f8c0d3b39ac739152015Romain Guy#include "Extensions.h"
2703750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy#include "FontRenderer.h"
2803750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy#include "GammaFontRenderer.h"
29fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy#include "TextureCache.h"
30fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy#include "LayerCache.h"
31fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy#include "GradientCache.h"
32fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy#include "PatchCache.h"
33fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy#include "ProgramCache.h"
34fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy#include "PathCache.h"
35fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy#include "TextDropShadowCache.h"
36e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy#include "FboCache.h"
3729d8997bd43b7c4ad37fc3d6f91eaafa74913c88Romain Guy#include "Line.h"
385c13d89c1332fcc499379b9064b891187b75ca32Chet Haase#include "ResourceCache.h"
39fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy
40fb8b763f762ae21923c58d64caa729b012f40e05Romain Guynamespace android {
41fb8b763f762ae21923c58d64caa729b012f40e05Romain Guynamespace uirenderer {
42fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy
4303750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy///////////////////////////////////////////////////////////////////////////////
4403750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy// Globals
4503750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy///////////////////////////////////////////////////////////////////////////////
4603750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy
4703750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy#define REQUIRED_TEXTURE_UNITS_COUNT 3
4803750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy
4903750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy// Generates simple and textured vertices
5003750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy#define FV(x, y, u, v) { { x, y }, { u, v } }
5103750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy
5203750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy// This array is never used directly but used as a memcpy source in the
5303750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy// OpenGLRenderer constructor
5403750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guystatic const TextureVertex gMeshVertices[] = {
5503750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy        FV(0.0f, 0.0f, 0.0f, 0.0f),
5603750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy        FV(1.0f, 0.0f, 1.0f, 0.0f),
5703750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy        FV(0.0f, 1.0f, 0.0f, 1.0f),
5803750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy        FV(1.0f, 1.0f, 1.0f, 1.0f)
5903750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy};
6003750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guystatic const GLsizei gMeshStride = sizeof(TextureVertex);
6103750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guystatic const GLsizei gMeshTextureOffset = 2 * sizeof(float);
6203750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guystatic const GLsizei gMeshCount = 4;
6303750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy
6403750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy///////////////////////////////////////////////////////////////////////////////
6503750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy// Debug
6603750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy///////////////////////////////////////////////////////////////////////////////
6703750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy
68fb8b763f762ae21923c58d64caa729b012f40e05Romain Guystruct CacheLogger {
69fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy    CacheLogger() {
70fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy        LOGD("Creating caches");
71fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy    }
72fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy}; // struct CacheLogger
73fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy
7403750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy///////////////////////////////////////////////////////////////////////////////
7503750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy// Caches
7603750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy///////////////////////////////////////////////////////////////////////////////
7703750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy
78fb8b763f762ae21923c58d64caa729b012f40e05Romain Guyclass Caches: public Singleton<Caches> {
79dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase    Caches();
80fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy
81fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy    friend class Singleton<Caches>;
82fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy
839bca4793a33d2714b306d69ceb870925a588fe71Romain Guy    CacheLogger mlogger;
849bca4793a33d2714b306d69ceb870925a588fe71Romain Guy
859bca4793a33d2714b306d69ceb870925a588fe71Romain Guy    GLuint mCurrentBuffer;
86fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy
87fb8b763f762ae21923c58d64caa729b012f40e05Romain Guypublic:
88dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase    void bindMeshBuffer();
89dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase    void bindMeshBuffer(const GLuint buffer);
90dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase    void unbindMeshBuffer();
9103750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy
92fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy    bool blend;
93fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy    GLenum lastSrcMode;
94fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy    GLenum lastDstMode;
95fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy    Program* currentProgram;
96fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy
97746b7401ceb86b5f2805f8c0d3b39ac739152015Romain Guy    // VBO to draw with
9803750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy    GLuint meshBuffer;
9903750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy
100746b7401ceb86b5f2805f8c0d3b39ac739152015Romain Guy    // GL extensions
101746b7401ceb86b5f2805f8c0d3b39ac739152015Romain Guy    Extensions extensions;
102746b7401ceb86b5f2805f8c0d3b39ac739152015Romain Guy
103746b7401ceb86b5f2805f8c0d3b39ac739152015Romain Guy    // Misc
104746b7401ceb86b5f2805f8c0d3b39ac739152015Romain Guy    GLint maxTextureSize;
105746b7401ceb86b5f2805f8c0d3b39ac739152015Romain Guy
106fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy    TextureCache textureCache;
107fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy    LayerCache layerCache;
108fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy    GradientCache gradientCache;
109fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy    ProgramCache programCache;
110fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy    PathCache pathCache;
111fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy    PatchCache patchCache;
112fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy    TextDropShadowCache dropShadowCache;
113e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy    FboCache fboCache;
11411fd654a90359043e17ac78c1a3d6578c38b5c42Romain Guy    GammaFontRenderer fontRenderer;
1155c13d89c1332fcc499379b9064b891187b75ca32Chet Haase    ResourceCache resourceCache;
11629d8997bd43b7c4ad37fc3d6f91eaafa74913c88Romain Guy
11729d8997bd43b7c4ad37fc3d6f91eaafa74913c88Romain Guy    Line line;
118fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy}; // class Caches
119fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy
120fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy}; // namespace uirenderer
121fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy
122fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy}; // namespace android
123fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy
124fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy#endif // ANDROID_UI_CACHES_H
125