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" 410baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy#include "Stencil.h" 42211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy#include "Dither.h" 43fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy 44fb8b763f762ae21923c58d64caa729b012f40e05Romain Guynamespace android { 45fb8b763f762ae21923c58d64caa729b012f40e05Romain Guynamespace uirenderer { 46fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy 4703750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy/////////////////////////////////////////////////////////////////////////////// 4803750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy// Globals 4903750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy/////////////////////////////////////////////////////////////////////////////// 5003750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy 5103750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy#define REQUIRED_TEXTURE_UNITS_COUNT 3 5203750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy 535b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#define REGION_MESH_QUAD_COUNT 512 545b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy 5503750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy// Generates simple and textured vertices 5603750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy#define FV(x, y, u, v) { { x, y }, { u, v } } 5703750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy 5803750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy// This array is never used directly but used as a memcpy source in the 5903750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy// OpenGLRenderer constructor 6003750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guystatic const TextureVertex gMeshVertices[] = { 6103750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy FV(0.0f, 0.0f, 0.0f, 0.0f), 6203750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy FV(1.0f, 0.0f, 1.0f, 0.0f), 6303750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy FV(0.0f, 1.0f, 0.0f, 1.0f), 6403750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy FV(1.0f, 1.0f, 1.0f, 1.0f) 6503750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy}; 6603750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guystatic const GLsizei gMeshStride = sizeof(TextureVertex); 675b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haasestatic const GLsizei gVertexStride = sizeof(Vertex); 685b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haasestatic const GLsizei gAlphaVertexStride = sizeof(AlphaVertex); 6999585adeb4167ca357a72eb866f34c1af944f4b9Chet Haasestatic const GLsizei gAAVertexStride = sizeof(AAVertex); 7003750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guystatic const GLsizei gMeshTextureOffset = 2 * sizeof(float); 716ebdc114e0d72137394f02bc8ffe9d7a782a65c4Chris Craikstatic const GLsizei gVertexAlphaOffset = 2 * sizeof(float); 7299585adeb4167ca357a72eb866f34c1af944f4b9Chet Haasestatic const GLsizei gVertexAAWidthOffset = 2 * sizeof(float); 7399585adeb4167ca357a72eb866f34c1af944f4b9Chet Haasestatic const GLsizei gVertexAALengthOffset = 3 * sizeof(float); 7403750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guystatic const GLsizei gMeshCount = 4; 7503750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy 76a1d3c91afbd52c7e8b01f4a9060c5459f02ae7a5Romain Guystatic const GLenum gTextureUnits[] = { 77a1d3c91afbd52c7e8b01f4a9060c5459f02ae7a5Romain Guy GL_TEXTURE0, 78a1d3c91afbd52c7e8b01f4a9060c5459f02ae7a5Romain Guy GL_TEXTURE1, 79a1d3c91afbd52c7e8b01f4a9060c5459f02ae7a5Romain Guy GL_TEXTURE2 80a1d3c91afbd52c7e8b01f4a9060c5459f02ae7a5Romain Guy}; 81a1d3c91afbd52c7e8b01f4a9060c5459f02ae7a5Romain Guy 8203750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy/////////////////////////////////////////////////////////////////////////////// 8303750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy// Debug 8403750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy/////////////////////////////////////////////////////////////////////////////// 8503750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy 86fb8b763f762ae21923c58d64caa729b012f40e05Romain Guystruct CacheLogger { 87fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy CacheLogger() { 88d6b2a00dd43257d1498b09175bff63663f6cb861Romain Guy INIT_LOGD("Creating OpenGL renderer caches"); 89fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy } 90fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy}; // struct CacheLogger 91fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy 9203750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy/////////////////////////////////////////////////////////////////////////////// 9303750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy// Caches 9403750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy/////////////////////////////////////////////////////////////////////////////// 9503750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy 96bb0acdf9e1d862a7cf0e2533321fc1105c29b5e3Romain Guyclass DisplayList; 97bb0acdf9e1d862a7cf0e2533321fc1105c29b5e3Romain Guy 987953745dd565167113f8cbfc461bc0521d32d870Romain Guyclass ANDROID_API Caches: public Singleton<Caches> { 99dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase Caches(); 100fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy 101fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy friend class Singleton<Caches>; 102fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy 103e190aa69756aecfaffabdd4c6d32cb6b3220d842Romain Guy CacheLogger mLogger; 1049bca4793a33d2714b306d69ceb870925a588fe71Romain Guy 105fb8b763f762ae21923c58d64caa729b012f40e05Romain Guypublic: 106bdf7609867a3f886455c51dba91623a86cceb6e2Romain Guy enum FlushMode { 1076d7475d666baefaa3ba9f0dcee25238739454241Romain Guy kFlushMode_Layers = 0, 1086d7475d666baefaa3ba9f0dcee25238739454241Romain Guy kFlushMode_Moderate, 109bdf7609867a3f886455c51dba91623a86cceb6e2Romain Guy kFlushMode_Full 110bdf7609867a3f886455c51dba91623a86cceb6e2Romain Guy }; 111bdf7609867a3f886455c51dba91623a86cceb6e2Romain Guy 112bdf7609867a3f886455c51dba91623a86cceb6e2Romain Guy /** 113dfa1046ecab165eb0daf5caa8475e993350f4a2bRomain Guy * Initialize caches. 1148ff6b9ebeeb24a6161ec6098e6bfdf8790ee5695Romain Guy */ 1158ff6b9ebeeb24a6161ec6098e6bfdf8790ee5695Romain Guy void init(); 1168ff6b9ebeeb24a6161ec6098e6bfdf8790ee5695Romain Guy 1178ff6b9ebeeb24a6161ec6098e6bfdf8790ee5695Romain Guy /** 118bdf7609867a3f886455c51dba91623a86cceb6e2Romain Guy * Flush the cache. 119bdf7609867a3f886455c51dba91623a86cceb6e2Romain Guy * 120bdf7609867a3f886455c51dba91623a86cceb6e2Romain Guy * @param mode Indicates how much of the cache should be flushed 121bdf7609867a3f886455c51dba91623a86cceb6e2Romain Guy */ 122bdf7609867a3f886455c51dba91623a86cceb6e2Romain Guy void flush(FlushMode mode); 123bdf7609867a3f886455c51dba91623a86cceb6e2Romain Guy 1245b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy /** 1258ff6b9ebeeb24a6161ec6098e6bfdf8790ee5695Romain Guy * Destroys all resources associated with this cache. This should 1268ff6b9ebeeb24a6161ec6098e6bfdf8790ee5695Romain Guy * be called after a flush(kFlushMode_Full). 1278ff6b9ebeeb24a6161ec6098e6bfdf8790ee5695Romain Guy */ 1288ff6b9ebeeb24a6161ec6098e6bfdf8790ee5695Romain Guy void terminate(); 1298ff6b9ebeeb24a6161ec6098e6bfdf8790ee5695Romain Guy 1308ff6b9ebeeb24a6161ec6098e6bfdf8790ee5695Romain Guy /** 131e190aa69756aecfaffabdd4c6d32cb6b3220d842Romain Guy * Indicates whether the renderer is in debug mode. 132e190aa69756aecfaffabdd4c6d32cb6b3220d842Romain Guy * This debug mode provides limited information to app developers. 133e190aa69756aecfaffabdd4c6d32cb6b3220d842Romain Guy */ 134e190aa69756aecfaffabdd4c6d32cb6b3220d842Romain Guy DebugLevel getDebugLevel() const { 135e190aa69756aecfaffabdd4c6d32cb6b3220d842Romain Guy return mDebugLevel; 136e190aa69756aecfaffabdd4c6d32cb6b3220d842Romain Guy } 137e190aa69756aecfaffabdd4c6d32cb6b3220d842Romain Guy 138e190aa69756aecfaffabdd4c6d32cb6b3220d842Romain Guy /** 139fe48f65922d4a3cc4aefe058cee5acec51504a20Romain Guy * Call this on each frame to ensure that garbage is deleted from 140fe48f65922d4a3cc4aefe058cee5acec51504a20Romain Guy * GPU memory. 141fe48f65922d4a3cc4aefe058cee5acec51504a20Romain Guy */ 142fe48f65922d4a3cc4aefe058cee5acec51504a20Romain Guy void clearGarbage(); 143fe48f65922d4a3cc4aefe058cee5acec51504a20Romain Guy 144fe48f65922d4a3cc4aefe058cee5acec51504a20Romain Guy /** 145ada830f639591b99c3e40de22b07296c7932a33fRomain Guy * Can be used to delete a layer from a non EGL thread. 14657066eb64c9a190d1afc87bb060bbb2d31e5b86cRomain Guy */ 147ada830f639591b99c3e40de22b07296c7932a33fRomain Guy void deleteLayerDeferred(Layer* layer); 14857066eb64c9a190d1afc87bb060bbb2d31e5b86cRomain Guy 149bb0acdf9e1d862a7cf0e2533321fc1105c29b5e3Romain Guy /* 150bb0acdf9e1d862a7cf0e2533321fc1105c29b5e3Romain Guy * Can be used to delete a display list from a non EGL thread. 151bb0acdf9e1d862a7cf0e2533321fc1105c29b5e3Romain Guy */ 152bb0acdf9e1d862a7cf0e2533321fc1105c29b5e3Romain Guy void deleteDisplayListDeferred(DisplayList* layer); 153bb0acdf9e1d862a7cf0e2533321fc1105c29b5e3Romain Guy 15457066eb64c9a190d1afc87bb060bbb2d31e5b86cRomain Guy /** 1555b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy * Binds the VBO used to render simple textured quads. 1565b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy */ 157f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy bool bindMeshBuffer(); 1585b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy 1595b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy /** 1605b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy * Binds the specified VBO if needed. 1615b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy */ 162f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy bool bindMeshBuffer(const GLuint buffer); 1635b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy 1645b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy /** 1655b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy * Unbinds the VBO used to render simple textured quads. 1665b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy */ 167f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy bool unbindMeshBuffer(); 168f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy 16915bc6437f8b4cf10dba55c7638d349e7b9563f4fRomain Guy bool bindIndicesBuffer(const GLuint buffer); 17015bc6437f8b4cf10dba55c7638d349e7b9563f4fRomain Guy bool unbindIndicesBuffer(); 17115bc6437f8b4cf10dba55c7638d349e7b9563f4fRomain Guy 172f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy /** 173f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy * Binds an attrib to the specified float vertex pointer. 174f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy * Assumes a stride of gMeshStride and a size of 2. 175f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy */ 176cb4d6009576cf08195dc23f341a3f4939c0878bbChris Craik void bindPositionVertexPointer(bool force, GLvoid* vertices, GLsizei stride = gMeshStride); 177f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy 178f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy /** 179f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy * Binds an attrib to the specified float vertex pointer. 180f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy * Assumes a stride of gMeshStride and a size of 2. 181f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy */ 182cb4d6009576cf08195dc23f341a3f4939c0878bbChris Craik void bindTexCoordsVertexPointer(bool force, GLvoid* vertices); 183f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy 184f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy /** 185f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy * Resets the vertex pointers. 186f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy */ 187f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy void resetVertexPointers(); 188f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy void resetTexCoordsVertexPointer(); 18903750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy 19015bc6437f8b4cf10dba55c7638d349e7b9563f4fRomain Guy void enableTexCoordsVertexArray(); 19115bc6437f8b4cf10dba55c7638d349e7b9563f4fRomain Guy void disbaleTexCoordsVertexArray(); 19215bc6437f8b4cf10dba55c7638d349e7b9563f4fRomain Guy 1935b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy /** 194a1d3c91afbd52c7e8b01f4a9060c5459f02ae7a5Romain Guy * Activate the specified texture unit. The texture unit must 195a1d3c91afbd52c7e8b01f4a9060c5459f02ae7a5Romain Guy * be specified using an integer number (0 for GL_TEXTURE0 etc.) 196a1d3c91afbd52c7e8b01f4a9060c5459f02ae7a5Romain Guy */ 197a1d3c91afbd52c7e8b01f4a9060c5459f02ae7a5Romain Guy void activeTexture(GLuint textureUnit); 198a1d3c91afbd52c7e8b01f4a9060c5459f02ae7a5Romain Guy 199a1d3c91afbd52c7e8b01f4a9060c5459f02ae7a5Romain Guy /** 2008f85e80b64b89fd38cc23b129f61ec36ddde7f15Romain Guy * Sets the scissor for the current surface. 2018f85e80b64b89fd38cc23b129f61ec36ddde7f15Romain Guy */ 2028a4ac610e1aaf04931ac1af54b146a7fc8e66114Romain Guy bool setScissor(GLint x, GLint y, GLint width, GLint height); 2038f85e80b64b89fd38cc23b129f61ec36ddde7f15Romain Guy 2048f85e80b64b89fd38cc23b129f61ec36ddde7f15Romain Guy /** 20582bc7a772747fcf8a6fe7097f70bf2981429ffe9Romain Guy * Resets the scissor state. 20682bc7a772747fcf8a6fe7097f70bf2981429ffe9Romain Guy */ 20782bc7a772747fcf8a6fe7097f70bf2981429ffe9Romain Guy void resetScissor(); 20882bc7a772747fcf8a6fe7097f70bf2981429ffe9Romain Guy 2098a4ac610e1aaf04931ac1af54b146a7fc8e66114Romain Guy bool enableScissor(); 2108a4ac610e1aaf04931ac1af54b146a7fc8e66114Romain Guy bool disableScissor(); 211586cae3ac69c0c667fbf8a954edbd399f620a717Romain Guy void setScissorEnabled(bool enabled); 212586cae3ac69c0c667fbf8a954edbd399f620a717Romain Guy 21385ef80d8902afe8d26cb75fa7837fd9e6d019620Romain Guy void startTiling(GLuint x, GLuint y, GLuint width, GLuint height, bool opaque); 21485ef80d8902afe8d26cb75fa7837fd9e6d019620Romain Guy void endTiling(); 21585ef80d8902afe8d26cb75fa7837fd9e6d019620Romain Guy 21682bc7a772747fcf8a6fe7097f70bf2981429ffe9Romain Guy /** 2175b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy * Returns the mesh used to draw regions. Calling this method will 2185b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy * bind a VBO of type GL_ELEMENT_ARRAY_BUFFER that contains the 2195b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy * indices for the region mesh. 2205b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy */ 2215b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy TextureVertex* getRegionMesh(); 2225b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy 223c15008e72ec00ca20a271c3006dac649fd07533bRomain Guy /** 224c15008e72ec00ca20a271c3006dac649fd07533bRomain Guy * Displays the memory usage of each cache and the total sum. 225c15008e72ec00ca20a271c3006dac649fd07533bRomain Guy */ 226c15008e72ec00ca20a271c3006dac649fd07533bRomain Guy void dumpMemoryUsage(); 2279c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase void dumpMemoryUsage(String8& log); 228c15008e72ec00ca20a271c3006dac649fd07533bRomain Guy 22954c1a64d5441a964890b44280e4457e11f4f924aRomain Guy bool hasRegisteredFunctors(); 23054c1a64d5441a964890b44280e4457e11f4f924aRomain Guy void registerFunctors(uint32_t functorCount); 23154c1a64d5441a964890b44280e4457e11f4f924aRomain Guy void unregisterFunctors(uint32_t functorCount); 23254c1a64d5441a964890b44280e4457e11f4f924aRomain Guy 233fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy bool blend; 234fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy GLenum lastSrcMode; 235fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy GLenum lastDstMode; 236fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy Program* currentProgram; 237586cae3ac69c0c667fbf8a954edbd399f620a717Romain Guy bool scissorEnabled; 238fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy 239746b7401ceb86b5f2805f8c0d3b39ac739152015Romain Guy // VBO to draw with 24003750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy GLuint meshBuffer; 24103750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy 242746b7401ceb86b5f2805f8c0d3b39ac739152015Romain Guy // GL extensions 243746b7401ceb86b5f2805f8c0d3b39ac739152015Romain Guy Extensions extensions; 244746b7401ceb86b5f2805f8c0d3b39ac739152015Romain Guy 245746b7401ceb86b5f2805f8c0d3b39ac739152015Romain Guy // Misc 246746b7401ceb86b5f2805f8c0d3b39ac739152015Romain Guy GLint maxTextureSize; 2474ff0cf4b83605bff630c4e6f1fabe4f72a3f93a1Romain Guy bool debugLayersUpdates; 2487c450aaa3caac2a05fcb20a177483d0e92378426Romain Guy bool debugOverdraw; 249746b7401ceb86b5f2805f8c0d3b39ac739152015Romain Guy 250fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy TextureCache textureCache; 251fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy LayerCache layerCache; 252fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy GradientCache gradientCache; 253fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy ProgramCache programCache; 254fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy PathCache pathCache; 25501d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy RoundRectShapeCache roundRectShapeCache; 25601d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy CircleShapeCache circleShapeCache; 257c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy OvalShapeCache ovalShapeCache; 258c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy RectShapeCache rectShapeCache; 2598b2f5267f16c295f12faab810527cd6311997e34Romain Guy ArcShapeCache arcShapeCache; 260fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy PatchCache patchCache; 261fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy TextDropShadowCache dropShadowCache; 262e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy FboCache fboCache; 2635c13d89c1332fcc499379b9064b891187b75ca32Chet Haase ResourceCache resourceCache; 26429d8997bd43b7c4ad37fc3d6f91eaafa74913c88Romain Guy 265b1d0a4ed21168fefcb82232c8f22cb95d60acb85Romain Guy GammaFontRenderer* fontRenderer; 266b1d0a4ed21168fefcb82232c8f22cb95d60acb85Romain Guy 2670baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy Dither dither; 2680baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy#if STENCIL_BUFFER_SIZE 2690baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy Stencil stencil; 2700baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy#endif 2710baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy 272dfa1046ecab165eb0daf5caa8475e993350f4a2bRomain Guy // Debug methods 27313631f3da855f200a151e7837ed9f6b079622b58Romain Guy PFNGLINSERTEVENTMARKEREXTPROC eventMark; 27413631f3da855f200a151e7837ed9f6b079622b58Romain Guy PFNGLPUSHGROUPMARKEREXTPROC startMark; 27513631f3da855f200a151e7837ed9f6b079622b58Romain Guy PFNGLPOPGROUPMARKEREXTPROC endMark; 27613631f3da855f200a151e7837ed9f6b079622b58Romain Guy 277dfa1046ecab165eb0daf5caa8475e993350f4a2bRomain Guy PFNGLLABELOBJECTEXTPROC setLabel; 278dfa1046ecab165eb0daf5caa8475e993350f4a2bRomain Guy PFNGLGETOBJECTLABELEXTPROC getLabel; 279dfa1046ecab165eb0daf5caa8475e993350f4a2bRomain Guy 280e190aa69756aecfaffabdd4c6d32cb6b3220d842Romain Guyprivate: 281b1d0a4ed21168fefcb82232c8f22cb95d60acb85Romain Guy void initFont(); 282dfa1046ecab165eb0daf5caa8475e993350f4a2bRomain Guy void initExtensions(); 283dfa1046ecab165eb0daf5caa8475e993350f4a2bRomain Guy void initConstraints(); 2844ff0cf4b83605bff630c4e6f1fabe4f72a3f93a1Romain Guy void initProperties(); 285dfa1046ecab165eb0daf5caa8475e993350f4a2bRomain Guy 286dfa1046ecab165eb0daf5caa8475e993350f4a2bRomain Guy static void eventMarkNull(GLsizei length, const GLchar* marker) { } 287dfa1046ecab165eb0daf5caa8475e993350f4a2bRomain Guy static void startMarkNull(GLsizei length, const GLchar* marker) { } 28813631f3da855f200a151e7837ed9f6b079622b58Romain Guy static void endMarkNull() { } 28913631f3da855f200a151e7837ed9f6b079622b58Romain Guy 290dfa1046ecab165eb0daf5caa8475e993350f4a2bRomain Guy static void setLabelNull(GLenum type, uint object, GLsizei length, 291dfa1046ecab165eb0daf5caa8475e993350f4a2bRomain Guy const char* label) { } 292dfa1046ecab165eb0daf5caa8475e993350f4a2bRomain Guy static void getLabelNull(GLenum type, uint object, GLsizei bufferSize, 293dfa1046ecab165eb0daf5caa8475e993350f4a2bRomain Guy GLsizei* length, char* label) { 294dfa1046ecab165eb0daf5caa8475e993350f4a2bRomain Guy if (length) *length = 0; 295dfa1046ecab165eb0daf5caa8475e993350f4a2bRomain Guy if (label) *label = '\0'; 296dfa1046ecab165eb0daf5caa8475e993350f4a2bRomain Guy } 297dfa1046ecab165eb0daf5caa8475e993350f4a2bRomain Guy 298f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy GLuint mCurrentBuffer; 29915bc6437f8b4cf10dba55c7638d349e7b9563f4fRomain Guy GLuint mCurrentIndicesBuffer; 300f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy void* mCurrentPositionPointer; 30116b897c488a740e004bfce7d50b0d7602277fc0bChris Craik GLsizei mCurrentPositionStride; 302f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy void* mCurrentTexCoordsPointer; 303f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy 30415bc6437f8b4cf10dba55c7638d349e7b9563f4fRomain Guy bool mTexCoordsArrayEnabled; 30515bc6437f8b4cf10dba55c7638d349e7b9563f4fRomain Guy 306a1d3c91afbd52c7e8b01f4a9060c5459f02ae7a5Romain Guy GLuint mTextureUnit; 307a1d3c91afbd52c7e8b01f4a9060c5459f02ae7a5Romain Guy 3088f85e80b64b89fd38cc23b129f61ec36ddde7f15Romain Guy GLint mScissorX; 3098f85e80b64b89fd38cc23b129f61ec36ddde7f15Romain Guy GLint mScissorY; 3108f85e80b64b89fd38cc23b129f61ec36ddde7f15Romain Guy GLint mScissorWidth; 3118f85e80b64b89fd38cc23b129f61ec36ddde7f15Romain Guy GLint mScissorHeight; 3128f85e80b64b89fd38cc23b129f61ec36ddde7f15Romain Guy 313f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy // Used to render layers 314f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy TextureVertex* mRegionMesh; 315f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy GLuint mRegionMeshIndices; 316f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy 317f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy mutable Mutex mGarbageLock; 318f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy Vector<Layer*> mLayerGarbage; 319bb0acdf9e1d862a7cf0e2533321fc1105c29b5e3Romain Guy Vector<DisplayList*> mDisplayListGarbage; 320f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy 321e190aa69756aecfaffabdd4c6d32cb6b3220d842Romain Guy DebugLevel mDebugLevel; 3228ff6b9ebeeb24a6161ec6098e6bfdf8790ee5695Romain Guy bool mInitialized; 32354c1a64d5441a964890b44280e4457e11f4f924aRomain Guy 32454c1a64d5441a964890b44280e4457e11f4f924aRomain Guy uint32_t mFunctorsCount; 325fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy}; // class Caches 326fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy 327fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy}; // namespace uirenderer 328fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy}; // namespace android 329fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy 3305b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#endif // ANDROID_HWUI_CACHES_H 331