Caches.cpp revision dd78ccacff83f0714ad90be98b58ad85f5d08c66
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
46dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase    currentBuffer = 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) {
60dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase    if (currentBuffer != buffer) {
61dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase        glBindBuffer(GL_ARRAY_BUFFER, buffer);
62dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase        currentBuffer = 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() {
70dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase    if (currentBuffer) {
71dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase        glBindBuffer(GL_ARRAY_BUFFER, 0);
72dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase        currentBuffer = 0;
73dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase    }
74dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase}
75dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase
76dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase}; // namespace uirenderer
77dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase}; // namespace android
78