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 17eb99356a0548684a501766e6a524529ab93304c8Romain Guy#include <stdlib.h> 18eb99356a0548684a501766e6a524529ab93304c8Romain Guy 19c9855a53edfac818dc68714557185977556f849dRomain Guy#include "Debug.h" 20e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy#include "FboCache.h" 21e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy#include "Properties.h" 22e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy 23e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guynamespace android { 24e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guynamespace uirenderer { 25e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy 26e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy/////////////////////////////////////////////////////////////////////////////// 27e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy// Constructors/destructor 28e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy/////////////////////////////////////////////////////////////////////////////// 29e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy 3048a8f431fa52ae2ee25ffba9d20676f03bb710ffChris CraikFboCache::FboCache() 3148a8f431fa52ae2ee25ffba9d20676f03bb710ffChris Craik : mMaxSize(Properties::fboCacheSize) {} 32e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy 33e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain GuyFboCache::~FboCache() { 34e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy clear(); 35e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy} 36e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy 37e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy/////////////////////////////////////////////////////////////////////////////// 38e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy// Size management 39e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy/////////////////////////////////////////////////////////////////////////////// 40e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy 41e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guyuint32_t FboCache::getSize() { 42e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy return mCache.size(); 43e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy} 44e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy 45e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guyuint32_t FboCache::getMaxSize() { 46e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy return mMaxSize; 47e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy} 48e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy 49e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy/////////////////////////////////////////////////////////////////////////////// 50e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy// Caching 51e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy/////////////////////////////////////////////////////////////////////////////// 52e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy 53e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guyvoid FboCache::clear() { 54eb99356a0548684a501766e6a524529ab93304c8Romain Guy for (size_t i = 0; i < mCache.size(); i++) { 55eb99356a0548684a501766e6a524529ab93304c8Romain Guy const GLuint fbo = mCache.itemAt(i); 56eb99356a0548684a501766e6a524529ab93304c8Romain Guy glDeleteFramebuffers(1, &fbo); 57eb99356a0548684a501766e6a524529ab93304c8Romain Guy } 58eb99356a0548684a501766e6a524529ab93304c8Romain Guy mCache.clear(); 59e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy} 60e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy 61e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain GuyGLuint FboCache::get() { 62eb99356a0548684a501766e6a524529ab93304c8Romain Guy GLuint fbo; 63eb99356a0548684a501766e6a524529ab93304c8Romain Guy if (mCache.size() > 0) { 64eb99356a0548684a501766e6a524529ab93304c8Romain Guy fbo = mCache.itemAt(mCache.size() - 1); 65eb99356a0548684a501766e6a524529ab93304c8Romain Guy mCache.removeAt(mCache.size() - 1); 66eb99356a0548684a501766e6a524529ab93304c8Romain Guy } else { 67eb99356a0548684a501766e6a524529ab93304c8Romain Guy glGenFramebuffers(1, &fbo); 68eb99356a0548684a501766e6a524529ab93304c8Romain Guy } 69eb99356a0548684a501766e6a524529ab93304c8Romain Guy return fbo; 70e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy} 71e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy 72e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guybool FboCache::put(GLuint fbo) { 73eb99356a0548684a501766e6a524529ab93304c8Romain Guy if (mCache.size() < mMaxSize) { 74eb99356a0548684a501766e6a524529ab93304c8Romain Guy mCache.add(fbo); 75eb99356a0548684a501766e6a524529ab93304c8Romain Guy return true; 76eb99356a0548684a501766e6a524529ab93304c8Romain Guy } 77eb99356a0548684a501766e6a524529ab93304c8Romain Guy 78eb99356a0548684a501766e6a524529ab93304c8Romain Guy glDeleteFramebuffers(1, &fbo); 79e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy return false; 80e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy} 81e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy 82e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy}; // namespace uirenderer 83e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy}; // namespace android 84