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