Caches.cpp revision 9bca4793a33d2714b306d69ceb870925a588fe71
1dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase/* 2dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase * Copyright (C) 2010 The Android Open Source Project 3dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase * 4dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase * Licensed under the Apache License, Version 2.0 (the "License"); 5dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase * you may not use this file except in compliance with the License. 6dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase * You may obtain a copy of the License at 7dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase * 8dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase * http://www.apache.org/licenses/LICENSE-2.0 9dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase * 10dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase * Unless required by applicable law or agreed to in writing, software 11dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase * distributed under the License is distributed on an "AS IS" BASIS, 12dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase * See the License for the specific language governing permissions and 14dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase * limitations under the License. 15dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase */ 16dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase 17dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase#define LOG_TAG "OpenGLRenderer" 18dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase 19dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase#include "Caches.h" 20dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase 21dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haasenamespace android { 22dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase 23dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase#ifdef USE_OPENGL_RENDERER 24dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haaseusing namespace uirenderer; 25dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet HaaseANDROID_SINGLETON_STATIC_INSTANCE(Caches); 26dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase#endif 27dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase 28dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haasenamespace uirenderer { 29dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase 30dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase/////////////////////////////////////////////////////////////////////////////// 31dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase// Constructors/destructor 32dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase/////////////////////////////////////////////////////////////////////////////// 33dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase 34dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet HaaseCaches::Caches(): Singleton<Caches>(), blend(false), lastSrcMode(GL_ZERO), 35dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase lastDstMode(GL_ZERO), currentProgram(NULL) { 36dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase GLint maxTextureUnits; 37dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &maxTextureUnits); 38dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase if (maxTextureUnits < REQUIRED_TEXTURE_UNITS_COUNT) { 39dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase LOGW("At least %d texture units are required!", REQUIRED_TEXTURE_UNITS_COUNT); 40dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase } 41dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase 42dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase glGenBuffers(1, &meshBuffer); 43dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase glBindBuffer(GL_ARRAY_BUFFER, meshBuffer); 44dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase glBufferData(GL_ARRAY_BUFFER, sizeof(gMeshVertices), gMeshVertices, GL_STATIC_DRAW); 45dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase 469bca4793a33d2714b306d69ceb870925a588fe71Romain Guy mCurrentBuffer = meshBuffer; 47dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase} 48dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase 49dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase/** 50dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase * Binds the VBO used to render simple textured quads. 51dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase */ 52dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haasevoid Caches::bindMeshBuffer() { 53dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase bindMeshBuffer(meshBuffer); 54dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase} 55dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase 56dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase/** 57dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase * Binds the specified VBO. 58dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase */ 59dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haasevoid Caches::bindMeshBuffer(const GLuint buffer) { 609bca4793a33d2714b306d69ceb870925a588fe71Romain Guy if (mCurrentBuffer != buffer) { 61dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase glBindBuffer(GL_ARRAY_BUFFER, buffer); 629bca4793a33d2714b306d69ceb870925a588fe71Romain Guy mCurrentBuffer = buffer; 63dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase } 64dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase} 65dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase 66dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase/** 67dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase * Unbinds the VBO used to render simple textured quads. 68dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase */ 69dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haasevoid Caches::unbindMeshBuffer() { 709bca4793a33d2714b306d69ceb870925a588fe71Romain Guy if (mCurrentBuffer) { 71dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase glBindBuffer(GL_ARRAY_BUFFER, 0); 729bca4793a33d2714b306d69ceb870925a588fe71Romain Guy mCurrentBuffer = 0; 73dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase } 74dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase} 75dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase 76dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase}; // namespace uirenderer 77dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase}; // namespace android 78