Layer.h revision dda570201ac851dd85af3861f7e575721d3345da
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
20dda570201ac851dd85af3861f7e575721d3345daRomain Guy#include <GLES2/gl2.h>
21dda570201ac851dd85af3861f7e575721d3345daRomain Guy
22dda570201ac851dd85af3861f7e575721d3345daRomain Guy#include <SkXfermode.h>
23dda570201ac851dd85af3861f7e575721d3345daRomain Guy
24dda570201ac851dd85af3861f7e575721d3345daRomain Guy#include "Rect.h"
25dda570201ac851dd85af3861f7e575721d3345daRomain Guy
26dda570201ac851dd85af3861f7e575721d3345daRomain Guynamespace android {
27dda570201ac851dd85af3861f7e575721d3345daRomain Guynamespace uirenderer {
28dda570201ac851dd85af3861f7e575721d3345daRomain Guy
29dda570201ac851dd85af3861f7e575721d3345daRomain Guy/**
30dda570201ac851dd85af3861f7e575721d3345daRomain Guy * Dimensions of a layer.
31dda570201ac851dd85af3861f7e575721d3345daRomain Guy */
32dda570201ac851dd85af3861f7e575721d3345daRomain Guystruct LayerSize {
33dda570201ac851dd85af3861f7e575721d3345daRomain Guy    LayerSize(): width(0), height(0) { }
34dda570201ac851dd85af3861f7e575721d3345daRomain Guy    LayerSize(const uint32_t width, const uint32_t height): width(width), height(height) { }
35dda570201ac851dd85af3861f7e575721d3345daRomain Guy    LayerSize(const LayerSize& size): width(size.width), height(size.height) { }
36dda570201ac851dd85af3861f7e575721d3345daRomain Guy
37dda570201ac851dd85af3861f7e575721d3345daRomain Guy    uint32_t width;
38dda570201ac851dd85af3861f7e575721d3345daRomain Guy    uint32_t height;
39dda570201ac851dd85af3861f7e575721d3345daRomain Guy
40dda570201ac851dd85af3861f7e575721d3345daRomain Guy    bool operator<(const LayerSize& rhs) const {
41dda570201ac851dd85af3861f7e575721d3345daRomain Guy        if (width == rhs.width) {
42dda570201ac851dd85af3861f7e575721d3345daRomain Guy            return height < rhs.height;
43dda570201ac851dd85af3861f7e575721d3345daRomain Guy        }
44dda570201ac851dd85af3861f7e575721d3345daRomain Guy        return width < rhs.width;
45dda570201ac851dd85af3861f7e575721d3345daRomain Guy    }
46dda570201ac851dd85af3861f7e575721d3345daRomain Guy
47dda570201ac851dd85af3861f7e575721d3345daRomain Guy    bool operator==(const LayerSize& rhs) const {
48dda570201ac851dd85af3861f7e575721d3345daRomain Guy        return width == rhs.width && height == rhs.height;
49dda570201ac851dd85af3861f7e575721d3345daRomain Guy    }
50dda570201ac851dd85af3861f7e575721d3345daRomain Guy};
51dda570201ac851dd85af3861f7e575721d3345daRomain Guy
52dda570201ac851dd85af3861f7e575721d3345daRomain Guy/**
53dda570201ac851dd85af3861f7e575721d3345daRomain Guy * A layer has dimensions and is backed by an OpenGL texture.
54dda570201ac851dd85af3861f7e575721d3345daRomain Guy */
55dda570201ac851dd85af3861f7e575721d3345daRomain Guystruct Layer {
56dda570201ac851dd85af3861f7e575721d3345daRomain Guy    /**
57dda570201ac851dd85af3861f7e575721d3345daRomain Guy     * Coordinates of the layer corresponding to this snapshot.
58dda570201ac851dd85af3861f7e575721d3345daRomain Guy     * Only set when the flag kFlagIsLayer is set.
59dda570201ac851dd85af3861f7e575721d3345daRomain Guy     */
60dda570201ac851dd85af3861f7e575721d3345daRomain Guy    Rect layer;
61dda570201ac851dd85af3861f7e575721d3345daRomain Guy    /**
62dda570201ac851dd85af3861f7e575721d3345daRomain Guy     * Name of the texture used to render the layer.
63dda570201ac851dd85af3861f7e575721d3345daRomain Guy     * Only set when the flag kFlagIsLayer is set.
64dda570201ac851dd85af3861f7e575721d3345daRomain Guy     */
65dda570201ac851dd85af3861f7e575721d3345daRomain Guy    GLuint texture;
66dda570201ac851dd85af3861f7e575721d3345daRomain Guy    /**
67dda570201ac851dd85af3861f7e575721d3345daRomain Guy     * Name of the FBO used to render the layer.
68dda570201ac851dd85af3861f7e575721d3345daRomain Guy     * Only set when the flag kFlagIsLayer is set.
69dda570201ac851dd85af3861f7e575721d3345daRomain Guy     */
70dda570201ac851dd85af3861f7e575721d3345daRomain Guy    GLuint fbo;
71dda570201ac851dd85af3861f7e575721d3345daRomain Guy    /**
72dda570201ac851dd85af3861f7e575721d3345daRomain Guy     * Opacity of the layer.
73dda570201ac851dd85af3861f7e575721d3345daRomain Guy     * Only set when the flag kFlagIsLayer is set.
74dda570201ac851dd85af3861f7e575721d3345daRomain Guy     */
75dda570201ac851dd85af3861f7e575721d3345daRomain Guy    float alpha;
76dda570201ac851dd85af3861f7e575721d3345daRomain Guy    /**
77dda570201ac851dd85af3861f7e575721d3345daRomain Guy     * Blending mode of the layer.
78dda570201ac851dd85af3861f7e575721d3345daRomain Guy     * Only set when the flag kFlagIsLayer is set.
79dda570201ac851dd85af3861f7e575721d3345daRomain Guy     */
80dda570201ac851dd85af3861f7e575721d3345daRomain Guy    SkXfermode::Mode mode;
81dda570201ac851dd85af3861f7e575721d3345daRomain Guy    /**
82dda570201ac851dd85af3861f7e575721d3345daRomain Guy     * Indicates whether this layer should be blended.
83dda570201ac851dd85af3861f7e575721d3345daRomain Guy     */
84dda570201ac851dd85af3861f7e575721d3345daRomain Guy    bool blend;
85dda570201ac851dd85af3861f7e575721d3345daRomain Guy}; // struct Layer
86dda570201ac851dd85af3861f7e575721d3345daRomain Guy
87dda570201ac851dd85af3861f7e575721d3345daRomain Guy}; // namespace uirenderer
88dda570201ac851dd85af3861f7e575721d3345daRomain Guy}; // namespace android
89dda570201ac851dd85af3861f7e575721d3345daRomain Guy
90dda570201ac851dd85af3861f7e575721d3345daRomain Guy#endif // ANDROID_UI_LAYER_H
91