Layer.h revision 076b1cc3a9b90aa5b381a1ed268ca0b548444c9b
1edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project/* 2edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 3edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 4edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * you may not use this file except in compliance with the License. 6edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * You may obtain a copy of the License at 7edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 8edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 10edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * See the License for the specific language governing permissions and 14edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * limitations under the License. 15edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */ 16edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 17edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#ifndef ANDROID_LAYER_H 18edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#define ANDROID_LAYER_H 19edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 20edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <stdint.h> 21edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <sys/types.h> 22edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 23edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <ui/PixelFormat.h> 24edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 25edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <private/ui/SharedState.h> 26edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <private/ui/LayerState.h> 27edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 28edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <pixelflinger/pixelflinger.h> 29edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 30076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian#include <EGL/egl.h> 31076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian#include <EGL/eglext.h> 32076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian#include <GLES/gl.h> 33076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian#include <GLES/glext.h> 34076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 35edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include "LayerBitmap.h" 36edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include "LayerBase.h" 37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include "Transform.h" 38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 39edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android { 40edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 41edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// --------------------------------------------------------------------------- 42edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass Client; 44edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass LayerBitmap; 45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass MemoryDealer; 46edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass FreezeLock; 47edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 48edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// --------------------------------------------------------------------------- 49edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 50076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopianconst int NUM_BUFFERS = 2; 51076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 52edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass Layer : public LayerBaseClient 53edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 54edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic: 55edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project static const uint32_t typeInfo; 56edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project static const char* const typeID; 57edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual char const* getTypeID() const { return typeID; } 58edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual uint32_t getTypeInfo() const { return typeInfo; } 59edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 60edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project Layer(SurfaceFlinger* flinger, DisplayID display, 61edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project Client* c, int32_t i); 62edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 63edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual ~Layer(); 64edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 65edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline PixelFormat pixelFormat() const { 66076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian return frontBuffer().getPixelFormat(); 67edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 68edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 69edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project status_t setBuffers( Client* client, 70edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t w, uint32_t h, 71edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project PixelFormat format, uint32_t flags=0); 72edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 73edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual void onDraw(const Region& clip) const; 74edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual void initStates(uint32_t w, uint32_t h, uint32_t flags); 75edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual void setSizeChanged(uint32_t w, uint32_t h); 76edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual uint32_t doTransaction(uint32_t transactionFlags); 77edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual Point getPhysicalSize() const; 78edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual void lockPageFlip(bool& recomputeVisibleRegions); 79edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual void unlockPageFlip(const Transform& planeTransform, Region& outDirtyRegion); 80edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual void finishPageFlip(); 81edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual bool needsBlending() const { return mNeedsBlending; } 82edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual bool isSecure() const { return mSecure; } 83076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian virtual sp<Surface> createSurface() const; 84edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 85edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project const LayerBitmap& getBuffer(int i) const { return mBuffers[i]; } 86edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project LayerBitmap& getBuffer(int i) { return mBuffers[i]; } 87edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 88edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // only for debugging 89edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project const sp<FreezeLock>& getFreezeLock() const { return mFreezeLock; } 90edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 91edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectprivate: 92edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline const LayerBitmap& 93edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project frontBuffer() const { return getBuffer(mFrontBufferIndex); } 94edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline LayerBitmap& 95edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project frontBuffer() { return getBuffer(mFrontBufferIndex); } 96edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline const LayerBitmap& 97edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project backBuffer() const { return getBuffer(1-mFrontBufferIndex); } 98edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline LayerBitmap& 99edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project backBuffer() { return getBuffer(1-mFrontBufferIndex); } 100edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 101edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void reloadTexture(const Region& dirty); 102edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 103edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project status_t resize(int32_t index, uint32_t w, uint32_t h, const char* what); 104edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project Region post(uint32_t* oldState, bool& recomputeVisibleRegions); 105076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian sp<SurfaceBuffer> peekBuffer(); 106076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 107076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 108076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian class SurfaceLayer : public LayerBaseClient::Surface 109076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian { 110076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian public: 111076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian SurfaceLayer(SurfaceID id, const sp<Layer>& owner); 112076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 113076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian private: 114076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian virtual sp<SurfaceBuffer> getBuffer(); 115076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 116076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian sp<Layer> getOwner() const { 117076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian return static_cast<Layer*>(Surface::getOwner().get()); 118076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian } 119076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian }; 120076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian friend class SurfaceLayer; 121076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 122076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian struct Texture { 123076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian Texture() : name(-1U), width(0), height(0), image(EGL_NO_IMAGE_KHR), 124076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian dirty(true) { } 125076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian GLuint name; 126076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian GLuint width; 127076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian GLuint height; 128076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian EGLImageKHR image; 129076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian bool dirty; 130076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian }; 131076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 132edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project sp<Surface> mSurface; 133edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 134edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project bool mSecure; 135076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian LayerBitmap mBuffers[NUM_BUFFERS]; 136076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian Texture mTextures[NUM_BUFFERS]; 137edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project int32_t mFrontBufferIndex; 138edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project bool mNeedsBlending; 139edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project bool mResizeTransactionDone; 140edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project Region mPostedDirtyRegion; 141edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project sp<FreezeLock> mFreezeLock; 142edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; 143edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 144edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// --------------------------------------------------------------------------- 145edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 146edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android 147edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 148edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#endif // ANDROID_LAYER_H 149