1e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy/* 2e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy * Copyright (C) 2010 The Android Open Source Project 3e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy * 4e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy * Licensed under the Apache License, Version 2.0 (the "License"); 5e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy * you may not use this file except in compliance with the License. 6e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy * You may obtain a copy of the License at 7e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy * 8e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy * http://www.apache.org/licenses/LICENSE-2.0 9e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy * 10e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy * Unless required by applicable law or agreed to in writing, software 11e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy * distributed under the License is distributed on an "AS IS" BASIS, 12e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy * See the License for the specific language governing permissions and 14e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy * limitations under the License. 15e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy */ 16e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy 175b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#ifndef ANDROID_HWUI_FBO_CACHE_H 185b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#define ANDROID_HWUI_FBO_CACHE_H 19e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy 20e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy#include <GLES2/gl2.h> 21e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy 22e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy#include <utils/SortedVector.h> 23e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy 24e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guynamespace android { 25e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guynamespace uirenderer { 26e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy 27e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy/////////////////////////////////////////////////////////////////////////////// 28e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy// Cache 29e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy/////////////////////////////////////////////////////////////////////////////// 30e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy 31e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guyclass FboCache { 32e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guypublic: 33e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy FboCache(); 34e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy ~FboCache(); 35e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy 36e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy /** 37e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy * Returns an FBO from the cache. If no FBO is available, a new one 38e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy * is created. If creating a new FBO fails, 0 is returned. 39e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy * 40e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy * When an FBO is obtained from the cache, it is removed and the 41e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy * total number of FBOs available in the cache decreases. 42e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy * 43e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy * @return The name of the FBO, or 0 if no FBO can be obtained. 44e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy */ 45e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy GLuint get(); 46e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy 47e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy /** 48e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy * Adds the specified FBO to the cache. 49e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy * 50e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy * @param fbo The FBO to add to the cache. 51e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy * 52e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy * @return True if the FBO was added, false otherwise. 53e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy */ 54e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy bool put(GLuint fbo); 55e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy 56e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy /** 57e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy * Clears the cache. This causes all FBOs to be deleted. 58e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy */ 59e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy void clear(); 60e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy 61e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy /** 62e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy * Returns the current size of the cache. 63e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy */ 64e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy uint32_t getSize(); 65e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy 66e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy /** 67e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy * Returns the maximum number of FBOs that the cache can hold. 68e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy */ 69e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy uint32_t getMaxSize(); 70e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy 71e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guyprivate: 72e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy SortedVector<GLuint> mCache; 73e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy uint32_t mMaxSize; 74e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy}; // class FboCache 75e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy 76e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy}; // namespace uirenderer 77e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy}; // namespace android 78e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy 795b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#endif // ANDROID_HWUI_FBO_CACHE_H 80