Caches.h revision c15008e72ec00ca20a271c3006dac649fd07533b
1/* 2 * Copyright (C) 2010 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17#ifndef ANDROID_HWUI_CACHES_H 18#define ANDROID_HWUI_CACHES_H 19 20#ifndef LOG_TAG 21 #define LOG_TAG "OpenGLRenderer" 22#endif 23 24#include <utils/Singleton.h> 25 26#include "Extensions.h" 27#include "FontRenderer.h" 28#include "GammaFontRenderer.h" 29#include "TextureCache.h" 30#include "LayerCache.h" 31#include "GradientCache.h" 32#include "PatchCache.h" 33#include "ProgramCache.h" 34#include "PathCache.h" 35#include "TextDropShadowCache.h" 36#include "FboCache.h" 37#include "Line.h" 38#include "ResourceCache.h" 39 40namespace android { 41namespace uirenderer { 42 43/////////////////////////////////////////////////////////////////////////////// 44// Globals 45/////////////////////////////////////////////////////////////////////////////// 46 47#define REQUIRED_TEXTURE_UNITS_COUNT 3 48 49#define REGION_MESH_QUAD_COUNT 512 50 51// Generates simple and textured vertices 52#define FV(x, y, u, v) { { x, y }, { u, v } } 53 54// This array is never used directly but used as a memcpy source in the 55// OpenGLRenderer constructor 56static const TextureVertex gMeshVertices[] = { 57 FV(0.0f, 0.0f, 0.0f, 0.0f), 58 FV(1.0f, 0.0f, 1.0f, 0.0f), 59 FV(0.0f, 1.0f, 0.0f, 1.0f), 60 FV(1.0f, 1.0f, 1.0f, 1.0f) 61}; 62static const GLsizei gMeshStride = sizeof(TextureVertex); 63static const GLsizei gMeshTextureOffset = 2 * sizeof(float); 64static const GLsizei gMeshCount = 4; 65 66/////////////////////////////////////////////////////////////////////////////// 67// Debug 68/////////////////////////////////////////////////////////////////////////////// 69 70struct CacheLogger { 71 CacheLogger() { 72 LOGD("Creating caches"); 73 } 74}; // struct CacheLogger 75 76/////////////////////////////////////////////////////////////////////////////// 77// Caches 78/////////////////////////////////////////////////////////////////////////////// 79 80class Caches: public Singleton<Caches> { 81 Caches(); 82 ~Caches(); 83 84 friend class Singleton<Caches>; 85 86 CacheLogger mlogger; 87 88 GLuint mCurrentBuffer; 89 90 // Used to render layers 91 TextureVertex* mRegionMesh; 92 GLuint mRegionMeshIndices; 93 94public: 95 /** 96 * Binds the VBO used to render simple textured quads. 97 */ 98 void bindMeshBuffer(); 99 100 /** 101 * Binds the specified VBO if needed. 102 */ 103 void bindMeshBuffer(const GLuint buffer); 104 105 /** 106 * Unbinds the VBO used to render simple textured quads. 107 */ 108 void unbindMeshBuffer(); 109 110 /** 111 * Returns the mesh used to draw regions. Calling this method will 112 * bind a VBO of type GL_ELEMENT_ARRAY_BUFFER that contains the 113 * indices for the region mesh. 114 */ 115 TextureVertex* getRegionMesh(); 116 117 /** 118 * Displays the memory usage of each cache and the total sum. 119 */ 120 void dumpMemoryUsage(); 121 122 bool blend; 123 GLenum lastSrcMode; 124 GLenum lastDstMode; 125 Program* currentProgram; 126 127 // VBO to draw with 128 GLuint meshBuffer; 129 130 // GL extensions 131 Extensions extensions; 132 133 // Misc 134 GLint maxTextureSize; 135 136 TextureCache textureCache; 137 LayerCache layerCache; 138 GradientCache gradientCache; 139 ProgramCache programCache; 140 PathCache pathCache; 141 PatchCache patchCache; 142 TextDropShadowCache dropShadowCache; 143 FboCache fboCache; 144 GammaFontRenderer fontRenderer; 145 ResourceCache resourceCache; 146 147 Line line; 148}; // class Caches 149 150}; // namespace uirenderer 151}; // namespace android 152 153#endif // ANDROID_HWUI_CACHES_H 154