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 303b20251a355c88193c439f928a84ae69483fb488John Reckclass RenderState; 313b20251a355c88193c439f928a84ae69483fb488John Reck 326c319ca1275c8db892c39b48fc54864c949f9171Romain Guy/////////////////////////////////////////////////////////////////////////////// 331fc883b271707c4206ae20cc9a935d7bd4a7485eRomain Guy// Defines 341fc883b271707c4206ae20cc9a935d7bd4a7485eRomain Guy/////////////////////////////////////////////////////////////////////////////// 351fc883b271707c4206ae20cc9a935d7bd4a7485eRomain Guy 361fc883b271707c4206ae20cc9a935d7bd4a7485eRomain Guy// Debug 371fc883b271707c4206ae20cc9a935d7bd4a7485eRomain Guy#if DEBUG_LAYER_RENDERER 385baa3a62a97544669fba6d65a11c07f252e654ddSteve Block #define LAYER_RENDERER_LOGD(...) ALOGD(__VA_ARGS__) 391fc883b271707c4206ae20cc9a935d7bd4a7485eRomain Guy#else 401fc883b271707c4206ae20cc9a935d7bd4a7485eRomain Guy #define LAYER_RENDERER_LOGD(...) 411fc883b271707c4206ae20cc9a935d7bd4a7485eRomain Guy#endif 421fc883b271707c4206ae20cc9a935d7bd4a7485eRomain Guy 431fc883b271707c4206ae20cc9a935d7bd4a7485eRomain Guy/////////////////////////////////////////////////////////////////////////////// 446c319ca1275c8db892c39b48fc54864c949f9171Romain Guy// Renderer 456c319ca1275c8db892c39b48fc54864c949f9171Romain Guy/////////////////////////////////////////////////////////////////////////////// 466c319ca1275c8db892c39b48fc54864c949f9171Romain Guy 476c319ca1275c8db892c39b48fc54864c949f9171Romain Guyclass LayerRenderer: public OpenGLRenderer { 486c319ca1275c8db892c39b48fc54864c949f9171Romain Guypublic: 493b20251a355c88193c439f928a84ae69483fb488John Reck LayerRenderer(RenderState& renderState, Layer* layer); 507953745dd565167113f8cbfc461bc0521d32d870Romain Guy virtual ~LayerRenderer(); 516c319ca1275c8db892c39b48fc54864c949f9171Romain Guy 521aa5d2d7068147ff781cfe911a93f01593a68c79John Reck virtual void onViewportInitialized() { /* do nothing */ } 537c25aab491707f7324f9941b8cfa9bd2b4b97e76Romain Guy virtual status_t prepareDirty(float left, float top, float right, float bottom, bool opaque); 547c25aab491707f7324f9941b8cfa9bd2b4b97e76Romain Guy virtual status_t clear(float left, float top, float right, float bottom, bool opaque); 557953745dd565167113f8cbfc461bc0521d32d870Romain Guy virtual void finish(); 566c319ca1275c8db892c39b48fc54864c949f9171Romain Guy 573b20251a355c88193c439f928a84ae69483fb488John Reck static Layer* createTextureLayer(RenderState& renderState); 583b20251a355c88193c439f928a84ae69483fb488John Reck static Layer* createRenderLayer(RenderState& renderState, uint32_t width, uint32_t height); 593b20251a355c88193c439f928a84ae69483fb488John Reck static bool resizeLayer(Layer* layer, uint32_t width, uint32_t height); 603b20251a355c88193c439f928a84ae69483fb488John Reck static void updateTextureLayer(Layer* layer, uint32_t width, uint32_t height, 619757ac0b9d62f6aea5e47cfb375f445c78bb7897Chris Craik bool isOpaque, bool forceFilter, GLenum renderTarget, float* textureTransform); 623b20251a355c88193c439f928a84ae69483fb488John Reck static void destroyLayer(Layer* layer); 633b20251a355c88193c439f928a84ae69483fb488John Reck static bool copyLayer(RenderState& renderState, Layer* layer, SkBitmap* bitmap); 646c319ca1275c8db892c39b48fc54864c949f9171Romain Guy 653b20251a355c88193c439f928a84ae69483fb488John Reck static void flushLayer(RenderState& renderState, Layer* layer); 6698d3a64ffa13596e3ea9125bbff40c51ec96bd8dChet Haase 6711cb642756093a4af901b1525375b1eb2b5c3e2bRomain Guyprotected: 688ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy virtual void ensureStencilBuffer(); 69624234f69b2a4781d24f3e4c6ae6450729e38397Romain Guy virtual bool hasLayer() const; 70624234f69b2a4781d24f3e4c6ae6450729e38397Romain Guy virtual Region* getRegion() const; 7114e513058ed4168c94e015638d16f5f87fd8063aChris Craik virtual GLuint getTargetFbo() const; 72624234f69b2a4781d24f3e4c6ae6450729e38397Romain Guy virtual bool suppressErrorChecks() const; 7311cb642756093a4af901b1525375b1eb2b5c3e2bRomain Guy 746c319ca1275c8db892c39b48fc54864c949f9171Romain Guyprivate: 75f219da5e32e85deb442468ee9a63bb28eb198557Romain Guy void generateMesh(); 76f219da5e32e85deb442468ee9a63bb28eb198557Romain Guy 77ada830f639591b99c3e40de22b07296c7932a33fRomain Guy Layer* mLayer; 786c319ca1275c8db892c39b48fc54864c949f9171Romain Guy}; // class LayerRenderer 796c319ca1275c8db892c39b48fc54864c949f9171Romain Guy 806c319ca1275c8db892c39b48fc54864c949f9171Romain Guy}; // namespace uirenderer 816c319ca1275c8db892c39b48fc54864c949f9171Romain Guy}; // namespace android 826c319ca1275c8db892c39b48fc54864c949f9171Romain Guy 836c319ca1275c8db892c39b48fc54864c949f9171Romain Guy#endif // ANDROID_HWUI_LAYER_RENDERER_H 84