Layer.cpp revision 98d3a64ffa13596e3ea9125bbff40c51ec96bd8d
1d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase/* 2d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase * Copyright (C) 2012 The Android Open Source Project 3d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase * 4d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase * Licensed under the Apache License, Version 2.0 (the "License"); 5d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase * you may not use this file except in compliance with the License. 6d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase * You may obtain a copy of the License at 7d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase * 8d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase * http://www.apache.org/licenses/LICENSE-2.0 9d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase * 10d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase * Unless required by applicable law or agreed to in writing, software 11d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase * distributed under the License is distributed on an "AS IS" BASIS, 12d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase * See the License for the specific language governing permissions and 14d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase * limitations under the License. 15d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase */ 16d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase 17d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase#define LOG_TAG "OpenGLRenderer" 18d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase 19d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase#include <utils/Log.h> 20d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase 21d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase#include "Layer.h" 2298d3a64ffa13596e3ea9125bbff40c51ec96bd8dChet Haase#include "LayerRenderer.h" 23d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase#include "OpenGLRenderer.h" 24d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase#include "Caches.h" 25d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase 26d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haasenamespace android { 27d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haasenamespace uirenderer { 28d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase 29603f6de35f21d74ae242d52d501f4f5c25ff4f4cChet HaaseLayer::Layer(const uint32_t layerWidth, const uint32_t layerHeight) { 30603f6de35f21d74ae242d52d501f4f5c25ff4f4cChet Haase mesh = NULL; 31603f6de35f21d74ae242d52d501f4f5c25ff4f4cChet Haase meshIndices = NULL; 32603f6de35f21d74ae242d52d501f4f5c25ff4f4cChet Haase meshElementCount = 0; 33603f6de35f21d74ae242d52d501f4f5c25ff4f4cChet Haase cacheable = true; 34603f6de35f21d74ae242d52d501f4f5c25ff4f4cChet Haase textureLayer = false; 35603f6de35f21d74ae242d52d501f4f5c25ff4f4cChet Haase renderTarget = GL_TEXTURE_2D; 36603f6de35f21d74ae242d52d501f4f5c25ff4f4cChet Haase texture.width = layerWidth; 37603f6de35f21d74ae242d52d501f4f5c25ff4f4cChet Haase texture.height = layerHeight; 38603f6de35f21d74ae242d52d501f4f5c25ff4f4cChet Haase colorFilter = NULL; 39603f6de35f21d74ae242d52d501f4f5c25ff4f4cChet Haase deferredUpdateScheduled = false; 40603f6de35f21d74ae242d52d501f4f5c25ff4f4cChet Haase renderer = NULL; 41603f6de35f21d74ae242d52d501f4f5c25ff4f4cChet Haase displayList = NULL; 42603f6de35f21d74ae242d52d501f4f5c25ff4f4cChet Haase fbo = 0; 43603f6de35f21d74ae242d52d501f4f5c25ff4f4cChet Haase Caches::getInstance().resourceCache.incrementRefcount(this); 44603f6de35f21d74ae242d52d501f4f5c25ff4f4cChet Haase} 45603f6de35f21d74ae242d52d501f4f5c25ff4f4cChet Haase 46d15ebf25c595b855f6978d0600218e3ea5f31e92Chet HaaseLayer::~Layer() { 47d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase if (mesh) delete mesh; 48d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase if (meshIndices) delete meshIndices; 49d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase if (colorFilter) Caches::getInstance().resourceCache.decrementRefcount(colorFilter); 5098d3a64ffa13596e3ea9125bbff40c51ec96bd8dChet Haase removeFbo(); 518a1374946a928fcba7495c87ff6adda327fdfb9fRomain Guy deleteTexture(); 5297dc9172b0e58979c63de0dedbab656399a62281Romain Guy} 5397dc9172b0e58979c63de0dedbab656399a62281Romain Guy 5498d3a64ffa13596e3ea9125bbff40c51ec96bd8dChet Haasevoid Layer::removeFbo() { 5598d3a64ffa13596e3ea9125bbff40c51ec96bd8dChet Haase if (fbo) { 5698d3a64ffa13596e3ea9125bbff40c51ec96bd8dChet Haase LayerRenderer::flushLayer(this); 5798d3a64ffa13596e3ea9125bbff40c51ec96bd8dChet Haase Caches::getInstance().fboCache.put(fbo); 5898d3a64ffa13596e3ea9125bbff40c51ec96bd8dChet Haase fbo = 0; 5956257aff8a55c847be72be9924c392033fd8151dDave Burke } 6056257aff8a55c847be72be9924c392033fd8151dDave Burke} 6156257aff8a55c847be72be9924c392033fd8151dDave Burke 62d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haasevoid Layer::setPaint(SkPaint* paint) { 63d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase OpenGLRenderer::getAlphaAndModeDirect(paint, &alpha, &mode); 64d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase} 65d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase 66d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haasevoid Layer::setColorFilter(SkiaColorFilter* filter) { 67d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase if (colorFilter) { 68d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase Caches::getInstance().resourceCache.decrementRefcount(colorFilter); 69d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase } 70d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase colorFilter = filter; 71d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase if (colorFilter) { 72d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase Caches::getInstance().resourceCache.incrementRefcount(colorFilter); 73d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase } 74d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase} 75d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase 7656257aff8a55c847be72be9924c392033fd8151dDave Burke 7756257aff8a55c847be72be9924c392033fd8151dDave Burke 78d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase}; // namespace uirenderer 79d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase}; // namespace android 80