16c319ca1275c8db892c39b48fc54864c949f9171Romain Guy/* 26c319ca1275c8db892c39b48fc54864c949f9171Romain Guy * Copyright (C) 2011 The Android Open Source Project 36c319ca1275c8db892c39b48fc54864c949f9171Romain Guy * 46c319ca1275c8db892c39b48fc54864c949f9171Romain Guy * Licensed under the Apache License, Version 2.0 (the "License"); 56c319ca1275c8db892c39b48fc54864c949f9171Romain Guy * you may not use this file except in compliance with the License. 66c319ca1275c8db892c39b48fc54864c949f9171Romain Guy * You may obtain a copy of the License at 76c319ca1275c8db892c39b48fc54864c949f9171Romain Guy * 86c319ca1275c8db892c39b48fc54864c949f9171Romain Guy * http://www.apache.org/licenses/LICENSE-2.0 96c319ca1275c8db892c39b48fc54864c949f9171Romain Guy * 106c319ca1275c8db892c39b48fc54864c949f9171Romain Guy * Unless required by applicable law or agreed to in writing, software 116c319ca1275c8db892c39b48fc54864c949f9171Romain Guy * distributed under the License is distributed on an "AS IS" BASIS, 126c319ca1275c8db892c39b48fc54864c949f9171Romain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136c319ca1275c8db892c39b48fc54864c949f9171Romain Guy * See the License for the specific language governing permissions and 146c319ca1275c8db892c39b48fc54864c949f9171Romain Guy * limitations under the License. 156c319ca1275c8db892c39b48fc54864c949f9171Romain Guy */ 166c319ca1275c8db892c39b48fc54864c949f9171Romain Guy 176c319ca1275c8db892c39b48fc54864c949f9171Romain Guy#ifndef ANDROID_HWUI_LAYER_RENDERER_H 186c319ca1275c8db892c39b48fc54864c949f9171Romain Guy#define ANDROID_HWUI_LAYER_RENDERER_H 196c319ca1275c8db892c39b48fc54864c949f9171Romain Guy 207953745dd565167113f8cbfc461bc0521d32d870Romain Guy#include <cutils/compiler.h> 217953745dd565167113f8cbfc461bc0521d32d870Romain Guy 226c319ca1275c8db892c39b48fc54864c949f9171Romain Guy#include "OpenGLRenderer.h" 23ada830f639591b99c3e40de22b07296c7932a33fRomain Guy#include "Layer.h" 246c319ca1275c8db892c39b48fc54864c949f9171Romain Guy 2577a811610f99e21da7f88dafef60d09f345d0506Romain Guy#include <SkBitmap.h> 2677a811610f99e21da7f88dafef60d09f345d0506Romain Guy 276c319ca1275c8db892c39b48fc54864c949f9171Romain Guynamespace android { 286c319ca1275c8db892c39b48fc54864c949f9171Romain Guynamespace uirenderer { 296c319ca1275c8db892c39b48fc54864c949f9171Romain Guy 306c319ca1275c8db892c39b48fc54864c949f9171Romain Guy/////////////////////////////////////////////////////////////////////////////// 311fc883b271707c4206ae20cc9a935d7bd4a7485eRomain Guy// Defines 321fc883b271707c4206ae20cc9a935d7bd4a7485eRomain Guy/////////////////////////////////////////////////////////////////////////////// 331fc883b271707c4206ae20cc9a935d7bd4a7485eRomain Guy 341fc883b271707c4206ae20cc9a935d7bd4a7485eRomain Guy// Debug 351fc883b271707c4206ae20cc9a935d7bd4a7485eRomain Guy#if DEBUG_LAYER_RENDERER 365baa3a62a97544669fba6d65a11c07f252e654ddSteve Block #define LAYER_RENDERER_LOGD(...) ALOGD(__VA_ARGS__) 371fc883b271707c4206ae20cc9a935d7bd4a7485eRomain Guy#else 381fc883b271707c4206ae20cc9a935d7bd4a7485eRomain Guy #define LAYER_RENDERER_LOGD(...) 391fc883b271707c4206ae20cc9a935d7bd4a7485eRomain Guy#endif 401fc883b271707c4206ae20cc9a935d7bd4a7485eRomain Guy 411fc883b271707c4206ae20cc9a935d7bd4a7485eRomain Guy/////////////////////////////////////////////////////////////////////////////// 426c319ca1275c8db892c39b48fc54864c949f9171Romain Guy// Renderer 436c319ca1275c8db892c39b48fc54864c949f9171Romain Guy/////////////////////////////////////////////////////////////////////////////// 446c319ca1275c8db892c39b48fc54864c949f9171Romain Guy 456c319ca1275c8db892c39b48fc54864c949f9171Romain Guyclass LayerRenderer: public OpenGLRenderer { 466c319ca1275c8db892c39b48fc54864c949f9171Romain Guypublic: 477953745dd565167113f8cbfc461bc0521d32d870Romain Guy ANDROID_API LayerRenderer(Layer* layer); 487953745dd565167113f8cbfc461bc0521d32d870Romain Guy virtual ~LayerRenderer(); 496c319ca1275c8db892c39b48fc54864c949f9171Romain Guy 5035643ddc689913f5b5f80ceed864470d987bd6cdRomain Guy virtual void setViewport(int width, int height); 517c25aab491707f7324f9941b8cfa9bd2b4b97e76Romain Guy virtual status_t prepareDirty(float left, float top, float right, float bottom, bool opaque); 527c25aab491707f7324f9941b8cfa9bd2b4b97e76Romain Guy virtual status_t clear(float left, float top, float right, float bottom, bool opaque); 537953745dd565167113f8cbfc461bc0521d32d870Romain Guy virtual void finish(); 546c319ca1275c8db892c39b48fc54864c949f9171Romain Guy 557953745dd565167113f8cbfc461bc0521d32d870Romain Guy ANDROID_API static Layer* createTextureLayer(bool isOpaque); 567953745dd565167113f8cbfc461bc0521d32d870Romain Guy ANDROID_API static Layer* createLayer(uint32_t width, uint32_t height, bool isOpaque = false); 577953745dd565167113f8cbfc461bc0521d32d870Romain Guy ANDROID_API static bool resizeLayer(Layer* layer, uint32_t width, uint32_t height); 587953745dd565167113f8cbfc461bc0521d32d870Romain Guy ANDROID_API static void updateTextureLayer(Layer* layer, uint32_t width, uint32_t height, 59a9489274d67b540804aafb587a226f7c2ae4464dRomain Guy bool isOpaque, GLenum renderTarget, float* transform); 607953745dd565167113f8cbfc461bc0521d32d870Romain Guy ANDROID_API static void destroyLayer(Layer* layer); 617953745dd565167113f8cbfc461bc0521d32d870Romain Guy ANDROID_API static void destroyLayerDeferred(Layer* layer); 627953745dd565167113f8cbfc461bc0521d32d870Romain Guy ANDROID_API static bool copyLayer(Layer* layer, SkBitmap* bitmap); 636c319ca1275c8db892c39b48fc54864c949f9171Romain Guy 6498d3a64ffa13596e3ea9125bbff40c51ec96bd8dChet Haase static void flushLayer(Layer* layer); 6598d3a64ffa13596e3ea9125bbff40c51ec96bd8dChet Haase 6611cb642756093a4af901b1525375b1eb2b5c3e2bRomain Guyprotected: 6711cb642756093a4af901b1525375b1eb2b5c3e2bRomain Guy virtual bool hasLayer(); 6811cb642756093a4af901b1525375b1eb2b5c3e2bRomain Guy virtual Region* getRegion(); 6911cb642756093a4af901b1525375b1eb2b5c3e2bRomain Guy virtual GLint getTargetFbo(); 7011cb642756093a4af901b1525375b1eb2b5c3e2bRomain Guy virtual bool suppressErrorChecks(); 7111cb642756093a4af901b1525375b1eb2b5c3e2bRomain Guy 726c319ca1275c8db892c39b48fc54864c949f9171Romain Guyprivate: 73f219da5e32e85deb442468ee9a63bb28eb198557Romain Guy void generateMesh(); 74f219da5e32e85deb442468ee9a63bb28eb198557Romain Guy 75ada830f639591b99c3e40de22b07296c7932a33fRomain Guy Layer* mLayer; 766c319ca1275c8db892c39b48fc54864c949f9171Romain Guy}; // class LayerRenderer 776c319ca1275c8db892c39b48fc54864c949f9171Romain Guy 786c319ca1275c8db892c39b48fc54864c949f9171Romain Guy}; // namespace uirenderer 796c319ca1275c8db892c39b48fc54864c949f9171Romain Guy}; // namespace android 806c319ca1275c8db892c39b48fc54864c949f9171Romain Guy 816c319ca1275c8db892c39b48fc54864c949f9171Romain Guy#endif // ANDROID_HWUI_LAYER_RENDERER_H 82