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