Layer.h revision f219da5e32e85deb442468ee9a63bb28eb198557
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    /**
108     * Color filter used to draw this layer. Optional.
109     */
110    SkiaColorFilter* colorFilter;
111
112    /**
113     * If the layer can be rendered as a mesh, this is non-null.
114     */
115    TextureVertex* mesh;
116    uint16_t* meshIndices;
117    GLsizei meshElementCount;
118}; // struct Layer
119
120}; // namespace uirenderer
121}; // namespace android
122
123#endif // ANDROID_HWUI_LAYER_H
124