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