Layer.h revision 8550c4c7b5952b7a4e1e0ede95c9492d03099a13
1dda570201ac851dd85af3861f7e575721d3345daRomain Guy/*
2dda570201ac851dd85af3861f7e575721d3345daRomain Guy * Copyright (C) 2010 The Android Open Source Project
3dda570201ac851dd85af3861f7e575721d3345daRomain Guy *
4dda570201ac851dd85af3861f7e575721d3345daRomain Guy * Licensed under the Apache License, Version 2.0 (the "License");
5dda570201ac851dd85af3861f7e575721d3345daRomain Guy * you may not use this file except in compliance with the License.
6dda570201ac851dd85af3861f7e575721d3345daRomain Guy * You may obtain a copy of the License at
7dda570201ac851dd85af3861f7e575721d3345daRomain Guy *
8dda570201ac851dd85af3861f7e575721d3345daRomain Guy *      http://www.apache.org/licenses/LICENSE-2.0
9dda570201ac851dd85af3861f7e575721d3345daRomain Guy *
10dda570201ac851dd85af3861f7e575721d3345daRomain Guy * Unless required by applicable law or agreed to in writing, software
11dda570201ac851dd85af3861f7e575721d3345daRomain Guy * distributed under the License is distributed on an "AS IS" BASIS,
12dda570201ac851dd85af3861f7e575721d3345daRomain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13dda570201ac851dd85af3861f7e575721d3345daRomain Guy * See the License for the specific language governing permissions and
14dda570201ac851dd85af3861f7e575721d3345daRomain Guy * limitations under the License.
15dda570201ac851dd85af3861f7e575721d3345daRomain Guy */
16dda570201ac851dd85af3861f7e575721d3345daRomain Guy
17dda570201ac851dd85af3861f7e575721d3345daRomain Guy#ifndef ANDROID_UI_LAYER_H
18dda570201ac851dd85af3861f7e575721d3345daRomain Guy#define ANDROID_UI_LAYER_H
19dda570201ac851dd85af3861f7e575721d3345daRomain Guy
20f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy#include <sys/types.h>
21f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy
22dda570201ac851dd85af3861f7e575721d3345daRomain Guy#include <GLES2/gl2.h>
23dda570201ac851dd85af3861f7e575721d3345daRomain Guy
24dda570201ac851dd85af3861f7e575721d3345daRomain Guy#include <SkXfermode.h>
25dda570201ac851dd85af3861f7e575721d3345daRomain Guy
26dda570201ac851dd85af3861f7e575721d3345daRomain Guy#include "Rect.h"
27dda570201ac851dd85af3861f7e575721d3345daRomain Guy
28dda570201ac851dd85af3861f7e575721d3345daRomain Guynamespace android {
29dda570201ac851dd85af3861f7e575721d3345daRomain Guynamespace uirenderer {
30dda570201ac851dd85af3861f7e575721d3345daRomain Guy
318550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy///////////////////////////////////////////////////////////////////////////////
328550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy// Layers
338550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy///////////////////////////////////////////////////////////////////////////////
34dda570201ac851dd85af3861f7e575721d3345daRomain Guy
35dda570201ac851dd85af3861f7e575721d3345daRomain Guy/**
36eb99356a0548684a501766e6a524529ab93304c8Romain Guy * A layer has dimensions and is backed by an OpenGL texture or FBO.
37dda570201ac851dd85af3861f7e575721d3345daRomain Guy */
38dda570201ac851dd85af3861f7e575721d3345daRomain Guystruct Layer {
398550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy    Layer(const uint32_t layerWidth, const uint32_t layerHeight):
408550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy            width(layerWidth), height(layerHeight) {
418550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy    }
428550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy
43dda570201ac851dd85af3861f7e575721d3345daRomain Guy    /**
448550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy     * Bounds of the layer.
45dda570201ac851dd85af3861f7e575721d3345daRomain Guy     */
46dda570201ac851dd85af3861f7e575721d3345daRomain Guy    Rect layer;
47dda570201ac851dd85af3861f7e575721d3345daRomain Guy    /**
488550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy     * Texture coordinates of the layer.
49dda570201ac851dd85af3861f7e575721d3345daRomain Guy     */
508550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy    Rect texCoords;
518550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy
52dda570201ac851dd85af3861f7e575721d3345daRomain Guy    /**
53eb99356a0548684a501766e6a524529ab93304c8Romain Guy     * Name of the FBO used to render the layer. If the name is 0
54eb99356a0548684a501766e6a524529ab93304c8Romain Guy     * this layer is not backed by an FBO, but a simple texture.
55eb99356a0548684a501766e6a524529ab93304c8Romain Guy     */
56eb99356a0548684a501766e6a524529ab93304c8Romain Guy    GLuint fbo;
578550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy
58eb99356a0548684a501766e6a524529ab93304c8Romain Guy    /**
59dda570201ac851dd85af3861f7e575721d3345daRomain Guy     * Opacity of the layer.
60dda570201ac851dd85af3861f7e575721d3345daRomain Guy     */
61f607bdc167f66b3e7003acaa4736ae46d78c1492Romain Guy    int alpha;
62dda570201ac851dd85af3861f7e575721d3345daRomain Guy    /**
63dda570201ac851dd85af3861f7e575721d3345daRomain Guy     * Blending mode of the layer.
64dda570201ac851dd85af3861f7e575721d3345daRomain Guy     */
65dda570201ac851dd85af3861f7e575721d3345daRomain Guy    SkXfermode::Mode mode;
66dda570201ac851dd85af3861f7e575721d3345daRomain Guy    /**
67dda570201ac851dd85af3861f7e575721d3345daRomain Guy     * Indicates whether this layer should be blended.
68dda570201ac851dd85af3861f7e575721d3345daRomain Guy     */
69dda570201ac851dd85af3861f7e575721d3345daRomain Guy    bool blend;
708550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy
7138c85b907a478af96d71b9a5df5a2066b8475311Romain Guy    /**
720bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy     * Indicates whether this layer has been used already.
7338c85b907a478af96d71b9a5df5a2066b8475311Romain Guy     */
7438c85b907a478af96d71b9a5df5a2066b8475311Romain Guy    bool empty;
758550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy
768550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy    /**
778550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy     * Name of the texture used to render the layer.
788550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy     */
798550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy    GLuint texture;
808550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy    /**
818550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy     * Width of the layer texture.
828550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy     */
838550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy    uint32_t width;
848550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy    /**
858550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy     * Height of the layer texture.
868550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy     */
878550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy    uint32_t height;
88dda570201ac851dd85af3861f7e575721d3345daRomain Guy}; // struct Layer
89dda570201ac851dd85af3861f7e575721d3345daRomain Guy
90dda570201ac851dd85af3861f7e575721d3345daRomain Guy}; // namespace uirenderer
91dda570201ac851dd85af3861f7e575721d3345daRomain Guy}; // namespace android
92dda570201ac851dd85af3861f7e575721d3345daRomain Guy
93dda570201ac851dd85af3861f7e575721d3345daRomain Guy#endif // ANDROID_UI_LAYER_H
94