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