Caches.h revision 211efea7376371ee755edd2ad03e83ef6eea464e
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 175b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#ifndef ANDROID_HWUI_CACHES_H 185b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#define ANDROID_HWUI_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 267953745dd565167113f8cbfc461bc0521d32d870Romain Guy#include <cutils/compiler.h> 277953745dd565167113f8cbfc461bc0521d32d870Romain Guy 28746b7401ceb86b5f2805f8c0d3b39ac739152015Romain Guy#include "Extensions.h" 2903750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy#include "FontRenderer.h" 3003750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy#include "GammaFontRenderer.h" 31fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy#include "TextureCache.h" 32fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy#include "LayerCache.h" 33fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy#include "GradientCache.h" 34fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy#include "PatchCache.h" 35fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy#include "ProgramCache.h" 3601d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy#include "ShapeCache.h" 37ff26a0c1c905dc1ec53b1bab860b80f2976d59beRomain Guy#include "PathCache.h" 38fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy#include "TextDropShadowCache.h" 39e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy#include "FboCache.h" 405c13d89c1332fcc499379b9064b891187b75ca32Chet Haase#include "ResourceCache.h" 41211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy#include "Dither.h" 42fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy 43fb8b763f762ae21923c58d64caa729b012f40e05Romain Guynamespace android { 44fb8b763f762ae21923c58d64caa729b012f40e05Romain Guynamespace uirenderer { 45fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy 4603750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy/////////////////////////////////////////////////////////////////////////////// 4703750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy// Globals 4803750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy/////////////////////////////////////////////////////////////////////////////// 4903750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy 5003750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy#define REQUIRED_TEXTURE_UNITS_COUNT 3 5103750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy 525b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#define REGION_MESH_QUAD_COUNT 512 535b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy 5403750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy// Generates simple and textured vertices 5503750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy#define FV(x, y, u, v) { { x, y }, { u, v } } 5603750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy 5703750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy// This array is never used directly but used as a memcpy source in the 5803750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy// OpenGLRenderer constructor 5903750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guystatic const TextureVertex gMeshVertices[] = { 6003750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy FV(0.0f, 0.0f, 0.0f, 0.0f), 6103750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy FV(1.0f, 0.0f, 1.0f, 0.0f), 6203750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy FV(0.0f, 1.0f, 0.0f, 1.0f), 6303750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy FV(1.0f, 1.0f, 1.0f, 1.0f) 6403750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy}; 6503750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guystatic const GLsizei gMeshStride = sizeof(TextureVertex); 665b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haasestatic const GLsizei gVertexStride = sizeof(Vertex); 675b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haasestatic const GLsizei gAlphaVertexStride = sizeof(AlphaVertex); 6899585adeb4167ca357a72eb866f34c1af944f4b9Chet Haasestatic const GLsizei gAAVertexStride = sizeof(AAVertex); 6903750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guystatic const GLsizei gMeshTextureOffset = 2 * sizeof(float); 7099585adeb4167ca357a72eb866f34c1af944f4b9Chet Haasestatic const GLsizei gVertexAAWidthOffset = 2 * sizeof(float); 7199585adeb4167ca357a72eb866f34c1af944f4b9Chet Haasestatic const GLsizei gVertexAALengthOffset = 3 * sizeof(float); 7203750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guystatic const GLsizei gMeshCount = 4; 7303750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy 74a1d3c91afbd52c7e8b01f4a9060c5459f02ae7a5Romain Guystatic const GLenum gTextureUnits[] = { 75a1d3c91afbd52c7e8b01f4a9060c5459f02ae7a5Romain Guy GL_TEXTURE0, 76a1d3c91afbd52c7e8b01f4a9060c5459f02ae7a5Romain Guy GL_TEXTURE1, 77a1d3c91afbd52c7e8b01f4a9060c5459f02ae7a5Romain Guy GL_TEXTURE2 78a1d3c91afbd52c7e8b01f4a9060c5459f02ae7a5Romain Guy}; 79a1d3c91afbd52c7e8b01f4a9060c5459f02ae7a5Romain Guy 8003750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy/////////////////////////////////////////////////////////////////////////////// 8103750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy// Debug 8203750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy/////////////////////////////////////////////////////////////////////////////// 8303750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy 84fb8b763f762ae21923c58d64caa729b012f40e05Romain Guystruct CacheLogger { 85fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy CacheLogger() { 86d6b2a00dd43257d1498b09175bff63663f6cb861Romain Guy INIT_LOGD("Creating OpenGL renderer caches"); 87fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy } 88fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy}; // struct CacheLogger 89fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy 9003750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy/////////////////////////////////////////////////////////////////////////////// 9103750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy// Caches 9203750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy/////////////////////////////////////////////////////////////////////////////// 9303750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy 94bb0acdf9e1d862a7cf0e2533321fc1105c29b5e3Romain Guyclass DisplayList; 95bb0acdf9e1d862a7cf0e2533321fc1105c29b5e3Romain Guy 967953745dd565167113f8cbfc461bc0521d32d870Romain Guyclass ANDROID_API Caches: public Singleton<Caches> { 97dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase Caches(); 98fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy 99fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy friend class Singleton<Caches>; 100fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy 101e190aa69756aecfaffabdd4c6d32cb6b3220d842Romain Guy CacheLogger mLogger; 1029bca4793a33d2714b306d69ceb870925a588fe71Romain Guy 103fb8b763f762ae21923c58d64caa729b012f40e05Romain Guypublic: 104bdf7609867a3f886455c51dba91623a86cceb6e2Romain Guy enum FlushMode { 1056d7475d666baefaa3ba9f0dcee25238739454241Romain Guy kFlushMode_Layers = 0, 1066d7475d666baefaa3ba9f0dcee25238739454241Romain Guy kFlushMode_Moderate, 107bdf7609867a3f886455c51dba91623a86cceb6e2Romain Guy kFlushMode_Full 108bdf7609867a3f886455c51dba91623a86cceb6e2Romain Guy }; 109bdf7609867a3f886455c51dba91623a86cceb6e2Romain Guy 110bdf7609867a3f886455c51dba91623a86cceb6e2Romain Guy /** 111dfa1046ecab165eb0daf5caa8475e993350f4a2bRomain Guy * Initialize caches. 1128ff6b9ebeeb24a6161ec6098e6bfdf8790ee5695Romain Guy */ 1138ff6b9ebeeb24a6161ec6098e6bfdf8790ee5695Romain Guy void init(); 1148ff6b9ebeeb24a6161ec6098e6bfdf8790ee5695Romain Guy 1158ff6b9ebeeb24a6161ec6098e6bfdf8790ee5695Romain Guy /** 116bdf7609867a3f886455c51dba91623a86cceb6e2Romain Guy * Flush the cache. 117bdf7609867a3f886455c51dba91623a86cceb6e2Romain Guy * 118bdf7609867a3f886455c51dba91623a86cceb6e2Romain Guy * @param mode Indicates how much of the cache should be flushed 119bdf7609867a3f886455c51dba91623a86cceb6e2Romain Guy */ 120bdf7609867a3f886455c51dba91623a86cceb6e2Romain Guy void flush(FlushMode mode); 121bdf7609867a3f886455c51dba91623a86cceb6e2Romain Guy 1225b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy /** 1238ff6b9ebeeb24a6161ec6098e6bfdf8790ee5695Romain Guy * Destroys all resources associated with this cache. This should 1248ff6b9ebeeb24a6161ec6098e6bfdf8790ee5695Romain Guy * be called after a flush(kFlushMode_Full). 1258ff6b9ebeeb24a6161ec6098e6bfdf8790ee5695Romain Guy */ 1268ff6b9ebeeb24a6161ec6098e6bfdf8790ee5695Romain Guy void terminate(); 1278ff6b9ebeeb24a6161ec6098e6bfdf8790ee5695Romain Guy 1288ff6b9ebeeb24a6161ec6098e6bfdf8790ee5695Romain Guy /** 129e190aa69756aecfaffabdd4c6d32cb6b3220d842Romain Guy * Indicates whether the renderer is in debug mode. 130e190aa69756aecfaffabdd4c6d32cb6b3220d842Romain Guy * This debug mode provides limited information to app developers. 131e190aa69756aecfaffabdd4c6d32cb6b3220d842Romain Guy */ 132e190aa69756aecfaffabdd4c6d32cb6b3220d842Romain Guy DebugLevel getDebugLevel() const { 133e190aa69756aecfaffabdd4c6d32cb6b3220d842Romain Guy return mDebugLevel; 134e190aa69756aecfaffabdd4c6d32cb6b3220d842Romain Guy } 135e190aa69756aecfaffabdd4c6d32cb6b3220d842Romain Guy 136e190aa69756aecfaffabdd4c6d32cb6b3220d842Romain Guy /** 137fe48f65922d4a3cc4aefe058cee5acec51504a20Romain Guy * Call this on each frame to ensure that garbage is deleted from 138fe48f65922d4a3cc4aefe058cee5acec51504a20Romain Guy * GPU memory. 139fe48f65922d4a3cc4aefe058cee5acec51504a20Romain Guy */ 140fe48f65922d4a3cc4aefe058cee5acec51504a20Romain Guy void clearGarbage(); 141fe48f65922d4a3cc4aefe058cee5acec51504a20Romain Guy 142fe48f65922d4a3cc4aefe058cee5acec51504a20Romain Guy /** 143ada830f639591b99c3e40de22b07296c7932a33fRomain Guy * Can be used to delete a layer from a non EGL thread. 14457066eb64c9a190d1afc87bb060bbb2d31e5b86cRomain Guy */ 145ada830f639591b99c3e40de22b07296c7932a33fRomain Guy void deleteLayerDeferred(Layer* layer); 14657066eb64c9a190d1afc87bb060bbb2d31e5b86cRomain Guy 147bb0acdf9e1d862a7cf0e2533321fc1105c29b5e3Romain Guy /* 148bb0acdf9e1d862a7cf0e2533321fc1105c29b5e3Romain Guy * Can be used to delete a display list from a non EGL thread. 149bb0acdf9e1d862a7cf0e2533321fc1105c29b5e3Romain Guy */ 150bb0acdf9e1d862a7cf0e2533321fc1105c29b5e3Romain Guy void deleteDisplayListDeferred(DisplayList* layer); 151bb0acdf9e1d862a7cf0e2533321fc1105c29b5e3Romain Guy 15257066eb64c9a190d1afc87bb060bbb2d31e5b86cRomain Guy /** 1535b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy * Binds the VBO used to render simple textured quads. 1545b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy */ 155f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy bool bindMeshBuffer(); 1565b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy 1575b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy /** 1585b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy * Binds the specified VBO if needed. 1595b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy */ 160f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy bool bindMeshBuffer(const GLuint buffer); 1615b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy 1625b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy /** 1635b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy * Unbinds the VBO used to render simple textured quads. 1645b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy */ 165f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy bool unbindMeshBuffer(); 166f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy 16715bc6437f8b4cf10dba55c7638d349e7b9563f4fRomain Guy bool bindIndicesBuffer(const GLuint buffer); 16815bc6437f8b4cf10dba55c7638d349e7b9563f4fRomain Guy bool unbindIndicesBuffer(); 16915bc6437f8b4cf10dba55c7638d349e7b9563f4fRomain Guy 170f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy /** 171f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy * Binds an attrib to the specified float vertex pointer. 172f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy * Assumes a stride of gMeshStride and a size of 2. 173f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy */ 174f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy void bindPositionVertexPointer(bool force, GLuint slot, GLvoid* vertices, 175f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy GLsizei stride = gMeshStride); 176f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy 177f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy /** 178f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy * Binds an attrib to the specified float vertex pointer. 179f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy * Assumes a stride of gMeshStride and a size of 2. 180f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy */ 181f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy void bindTexCoordsVertexPointer(bool force, GLuint slot, GLvoid* vertices); 182f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy 183f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy /** 184f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy * Resets the vertex pointers. 185f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy */ 186f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy void resetVertexPointers(); 187f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy void resetTexCoordsVertexPointer(); 18803750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy 18915bc6437f8b4cf10dba55c7638d349e7b9563f4fRomain Guy void enableTexCoordsVertexArray(); 19015bc6437f8b4cf10dba55c7638d349e7b9563f4fRomain Guy void disbaleTexCoordsVertexArray(); 19115bc6437f8b4cf10dba55c7638d349e7b9563f4fRomain Guy 1925b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy /** 193a1d3c91afbd52c7e8b01f4a9060c5459f02ae7a5Romain Guy * Activate the specified texture unit. The texture unit must 194a1d3c91afbd52c7e8b01f4a9060c5459f02ae7a5Romain Guy * be specified using an integer number (0 for GL_TEXTURE0 etc.) 195a1d3c91afbd52c7e8b01f4a9060c5459f02ae7a5Romain Guy */ 196a1d3c91afbd52c7e8b01f4a9060c5459f02ae7a5Romain Guy void activeTexture(GLuint textureUnit); 197a1d3c91afbd52c7e8b01f4a9060c5459f02ae7a5Romain Guy 198a1d3c91afbd52c7e8b01f4a9060c5459f02ae7a5Romain Guy /** 1998f85e80b64b89fd38cc23b129f61ec36ddde7f15Romain Guy * Sets the scissor for the current surface. 2008f85e80b64b89fd38cc23b129f61ec36ddde7f15Romain Guy */ 2018a4ac610e1aaf04931ac1af54b146a7fc8e66114Romain Guy bool setScissor(GLint x, GLint y, GLint width, GLint height); 2028f85e80b64b89fd38cc23b129f61ec36ddde7f15Romain Guy 2038f85e80b64b89fd38cc23b129f61ec36ddde7f15Romain Guy /** 20482bc7a772747fcf8a6fe7097f70bf2981429ffe9Romain Guy * Resets the scissor state. 20582bc7a772747fcf8a6fe7097f70bf2981429ffe9Romain Guy */ 20682bc7a772747fcf8a6fe7097f70bf2981429ffe9Romain Guy void resetScissor(); 20782bc7a772747fcf8a6fe7097f70bf2981429ffe9Romain Guy 2088a4ac610e1aaf04931ac1af54b146a7fc8e66114Romain Guy bool enableScissor(); 2098a4ac610e1aaf04931ac1af54b146a7fc8e66114Romain Guy bool disableScissor(); 210586cae3ac69c0c667fbf8a954edbd399f620a717Romain Guy void setScissorEnabled(bool enabled); 211586cae3ac69c0c667fbf8a954edbd399f620a717Romain Guy 21282bc7a772747fcf8a6fe7097f70bf2981429ffe9Romain Guy /** 2135b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy * Returns the mesh used to draw regions. Calling this method will 2145b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy * bind a VBO of type GL_ELEMENT_ARRAY_BUFFER that contains the 2155b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy * indices for the region mesh. 2165b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy */ 2175b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy TextureVertex* getRegionMesh(); 2185b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy 219c15008e72ec00ca20a271c3006dac649fd07533bRomain Guy /** 220c15008e72ec00ca20a271c3006dac649fd07533bRomain Guy * Displays the memory usage of each cache and the total sum. 221c15008e72ec00ca20a271c3006dac649fd07533bRomain Guy */ 222c15008e72ec00ca20a271c3006dac649fd07533bRomain Guy void dumpMemoryUsage(); 2239c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase void dumpMemoryUsage(String8& log); 224c15008e72ec00ca20a271c3006dac649fd07533bRomain Guy 225fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy bool blend; 226fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy GLenum lastSrcMode; 227fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy GLenum lastDstMode; 228fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy Program* currentProgram; 229586cae3ac69c0c667fbf8a954edbd399f620a717Romain Guy bool scissorEnabled; 230fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy 231746b7401ceb86b5f2805f8c0d3b39ac739152015Romain Guy // VBO to draw with 23203750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy GLuint meshBuffer; 23303750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy 234746b7401ceb86b5f2805f8c0d3b39ac739152015Romain Guy // GL extensions 235746b7401ceb86b5f2805f8c0d3b39ac739152015Romain Guy Extensions extensions; 236746b7401ceb86b5f2805f8c0d3b39ac739152015Romain Guy 237746b7401ceb86b5f2805f8c0d3b39ac739152015Romain Guy // Misc 238746b7401ceb86b5f2805f8c0d3b39ac739152015Romain Guy GLint maxTextureSize; 239746b7401ceb86b5f2805f8c0d3b39ac739152015Romain Guy 240fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy TextureCache textureCache; 241fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy LayerCache layerCache; 242fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy GradientCache gradientCache; 243fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy ProgramCache programCache; 244fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy PathCache pathCache; 24501d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy RoundRectShapeCache roundRectShapeCache; 24601d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy CircleShapeCache circleShapeCache; 247c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy OvalShapeCache ovalShapeCache; 248c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy RectShapeCache rectShapeCache; 2498b2f5267f16c295f12faab810527cd6311997e34Romain Guy ArcShapeCache arcShapeCache; 250fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy PatchCache patchCache; 251fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy TextDropShadowCache dropShadowCache; 252e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy FboCache fboCache; 2535c13d89c1332fcc499379b9064b891187b75ca32Chet Haase ResourceCache resourceCache; 254211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy Dither dither; 25529d8997bd43b7c4ad37fc3d6f91eaafa74913c88Romain Guy 256b1d0a4ed21168fefcb82232c8f22cb95d60acb85Romain Guy GammaFontRenderer* fontRenderer; 257b1d0a4ed21168fefcb82232c8f22cb95d60acb85Romain Guy 258dfa1046ecab165eb0daf5caa8475e993350f4a2bRomain Guy // Debug methods 25913631f3da855f200a151e7837ed9f6b079622b58Romain Guy PFNGLINSERTEVENTMARKEREXTPROC eventMark; 26013631f3da855f200a151e7837ed9f6b079622b58Romain Guy PFNGLPUSHGROUPMARKEREXTPROC startMark; 26113631f3da855f200a151e7837ed9f6b079622b58Romain Guy PFNGLPOPGROUPMARKEREXTPROC endMark; 26213631f3da855f200a151e7837ed9f6b079622b58Romain Guy 263dfa1046ecab165eb0daf5caa8475e993350f4a2bRomain Guy PFNGLLABELOBJECTEXTPROC setLabel; 264dfa1046ecab165eb0daf5caa8475e993350f4a2bRomain Guy PFNGLGETOBJECTLABELEXTPROC getLabel; 265dfa1046ecab165eb0daf5caa8475e993350f4a2bRomain Guy 266e190aa69756aecfaffabdd4c6d32cb6b3220d842Romain Guyprivate: 267b1d0a4ed21168fefcb82232c8f22cb95d60acb85Romain Guy void initFont(); 268dfa1046ecab165eb0daf5caa8475e993350f4a2bRomain Guy void initExtensions(); 269dfa1046ecab165eb0daf5caa8475e993350f4a2bRomain Guy void initConstraints(); 270dfa1046ecab165eb0daf5caa8475e993350f4a2bRomain Guy 271dfa1046ecab165eb0daf5caa8475e993350f4a2bRomain Guy static void eventMarkNull(GLsizei length, const GLchar* marker) { } 272dfa1046ecab165eb0daf5caa8475e993350f4a2bRomain Guy static void startMarkNull(GLsizei length, const GLchar* marker) { } 27313631f3da855f200a151e7837ed9f6b079622b58Romain Guy static void endMarkNull() { } 27413631f3da855f200a151e7837ed9f6b079622b58Romain Guy 275dfa1046ecab165eb0daf5caa8475e993350f4a2bRomain Guy static void setLabelNull(GLenum type, uint object, GLsizei length, 276dfa1046ecab165eb0daf5caa8475e993350f4a2bRomain Guy const char* label) { } 277dfa1046ecab165eb0daf5caa8475e993350f4a2bRomain Guy static void getLabelNull(GLenum type, uint object, GLsizei bufferSize, 278dfa1046ecab165eb0daf5caa8475e993350f4a2bRomain Guy GLsizei* length, char* label) { 279dfa1046ecab165eb0daf5caa8475e993350f4a2bRomain Guy if (length) *length = 0; 280dfa1046ecab165eb0daf5caa8475e993350f4a2bRomain Guy if (label) *label = '\0'; 281dfa1046ecab165eb0daf5caa8475e993350f4a2bRomain Guy } 282dfa1046ecab165eb0daf5caa8475e993350f4a2bRomain Guy 283f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy GLuint mCurrentBuffer; 28415bc6437f8b4cf10dba55c7638d349e7b9563f4fRomain Guy GLuint mCurrentIndicesBuffer; 285f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy void* mCurrentPositionPointer; 286f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy void* mCurrentTexCoordsPointer; 287f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy 28815bc6437f8b4cf10dba55c7638d349e7b9563f4fRomain Guy bool mTexCoordsArrayEnabled; 28915bc6437f8b4cf10dba55c7638d349e7b9563f4fRomain Guy 290a1d3c91afbd52c7e8b01f4a9060c5459f02ae7a5Romain Guy GLuint mTextureUnit; 291a1d3c91afbd52c7e8b01f4a9060c5459f02ae7a5Romain Guy 2928f85e80b64b89fd38cc23b129f61ec36ddde7f15Romain Guy GLint mScissorX; 2938f85e80b64b89fd38cc23b129f61ec36ddde7f15Romain Guy GLint mScissorY; 2948f85e80b64b89fd38cc23b129f61ec36ddde7f15Romain Guy GLint mScissorWidth; 2958f85e80b64b89fd38cc23b129f61ec36ddde7f15Romain Guy GLint mScissorHeight; 2968f85e80b64b89fd38cc23b129f61ec36ddde7f15Romain Guy 297f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy // Used to render layers 298f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy TextureVertex* mRegionMesh; 299f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy GLuint mRegionMeshIndices; 300f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy 301f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy mutable Mutex mGarbageLock; 302f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy Vector<Layer*> mLayerGarbage; 303bb0acdf9e1d862a7cf0e2533321fc1105c29b5e3Romain Guy Vector<DisplayList*> mDisplayListGarbage; 304f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy 305e190aa69756aecfaffabdd4c6d32cb6b3220d842Romain Guy DebugLevel mDebugLevel; 3068ff6b9ebeeb24a6161ec6098e6bfdf8790ee5695Romain Guy bool mInitialized; 307fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy}; // class Caches 308fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy 309fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy}; // namespace uirenderer 310fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy}; // namespace android 311fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy 3125b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#endif // ANDROID_HWUI_CACHES_H 313