Layer.h revision 40667676e542a9daeafeac9904c30004e8706fd3
1/* 2 * Copyright (C) 2010 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17#ifndef ANDROID_HWUI_LAYER_H 18#define ANDROID_HWUI_LAYER_H 19 20#include <sys/types.h> 21 22#include <GLES2/gl2.h> 23 24#include <ui/Region.h> 25 26#include <SkXfermode.h> 27 28#include "Rect.h" 29#include "SkiaColorFilter.h" 30#include "Vertex.h" 31 32namespace android { 33namespace uirenderer { 34 35/////////////////////////////////////////////////////////////////////////////// 36// Layers 37/////////////////////////////////////////////////////////////////////////////// 38 39/** 40 * A layer has dimensions and is backed by an OpenGL texture or FBO. 41 */ 42struct Layer { 43 Layer(const uint32_t layerWidth, const uint32_t layerHeight): 44 width(layerWidth), height(layerHeight) { 45 mesh = NULL; 46 meshIndices = NULL; 47 meshElementCount = 0; 48 } 49 50 ~Layer() { 51 if (mesh) delete mesh; 52 if (meshIndices) delete meshIndices; 53 } 54 55 /** 56 * Bounds of the layer. 57 */ 58 Rect layer; 59 /** 60 * Texture coordinates of the layer. 61 */ 62 Rect texCoords; 63 64 /** 65 * Name of the FBO used to render the layer. If the name is 0 66 * this layer is not backed by an FBO, but a simple texture. 67 */ 68 GLuint fbo; 69 70 /** 71 * Opacity of the layer. 72 */ 73 int alpha; 74 /** 75 * Blending mode of the layer. 76 */ 77 SkXfermode::Mode mode; 78 /** 79 * Indicates whether this layer should be blended. 80 */ 81 bool blend; 82 83 /** 84 * Indicates whether this layer has been used already. 85 */ 86 bool empty; 87 88 /** 89 * Name of the texture used to render the layer. 90 */ 91 GLuint texture; 92 /** 93 * Width of the layer texture. 94 */ 95 uint32_t width; 96 /** 97 * Height of the layer texture. 98 */ 99 uint32_t height; 100 101 /** 102 * Dirty region indicating what parts of the layer 103 * have been drawn. 104 */ 105 Region region; 106 /** 107 * If the region is a rectangle, coordinates of the 108 * region are stored here. 109 */ 110 Rect regionRect; 111 112 /** 113 * Color filter used to draw this layer. Optional. 114 */ 115 SkiaColorFilter* colorFilter; 116 117 /** 118 * If the layer can be rendered as a mesh, this is non-null. 119 */ 120 TextureVertex* mesh; 121 uint16_t* meshIndices; 122 GLsizei meshElementCount; 123}; // struct Layer 124 125}; // namespace uirenderer 126}; // namespace android 127 128#endif // ANDROID_HWUI_LAYER_H 129