DisplayDevice.h revision edbf3b6af777b721cd2a1ef461947e51e88241e1
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_DISPLAY_HARDWARE_H 18edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#define ANDROID_DISPLAY_HARDWARE_H 19edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 20edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <stdlib.h> 21edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 22edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <ui/PixelFormat.h> 23edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <ui/Region.h> 24edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 25edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <EGL/egl.h> 26edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 27edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include "DisplayHardware/DisplayHardwareBase.h" 28edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 29edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstruct overlay_control_device_t; 30edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstruct copybit_device_t; 31edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstruct copybit_image_t; 32edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstruct copybit_t; 33edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 34edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android { 35edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 36edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass EGLDisplaySurface; 37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass DisplayHardware : public DisplayHardwareBase 39edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 40edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic: 41edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project enum { 42edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project DIRECT_TEXTURE = 0x00000002, 43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project SWAP_RECTANGLE_EXTENSION= 0x00000004, 44edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project COPY_BITS_EXTENSION = 0x00000008, 45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project NPOT_EXTENSION = 0x00000100, 46edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project DRAW_TEXTURE_EXTENSION = 0x00000200, 47edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project BUFFER_PRESERVED = 0x00010000, 48edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project UPDATE_ON_DEMAND = 0x00020000, // video driver feature 49edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project SLOW_CONFIG = 0x00040000, // software 50edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project }; 51edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 52edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project DisplayHardware( 53edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project const sp<SurfaceFlinger>& flinger, 54edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t displayIndex); 55edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 56edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ~DisplayHardware(); 57edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 58edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void releaseScreen() const; 59edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void acquireScreen() const; 60edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 61edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // Flip the front and back buffers if the back buffer is "dirty". Might 62edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // be instantaneous, might involve copying the frame buffer around. 63edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void flip(const Region& dirty) const; 64edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 65edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project float getDpiX() const; 66edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project float getDpiY() const; 67edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project float getRefreshRate() const; 68edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project float getDensity() const; 69edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project int getWidth() const; 70edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project int getHeight() const; 71edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project PixelFormat getFormat() const; 72edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t getFlags() const; 73edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void makeCurrent() const; 74edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 75edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t getPageFlipCount() const; 76edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void getDisplaySurface(copybit_image_t* img) const; 77edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void getDisplaySurface(GGLSurface* fb) const; 78edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project EGLDisplay getEGLDisplay() const { return mDisplay; } 79edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project copybit_device_t* getBlitEngine() const { return mBlitEngine; } 80edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project overlay_control_device_t* getOverlayEngine() const { return mOverlayEngine; } 81edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 82edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void copyFrontToImage(const copybit_image_t& front) const; 83edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void copyBackToImage(const copybit_image_t& front) const; 84edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 85edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project Rect bounds() const { 86edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return Rect(mWidth, mHeight); 87edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 88edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 89edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectprivate: 90edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void init(uint32_t displayIndex) __attribute__((noinline)); 91edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void fini() __attribute__((noinline)); 92edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 93edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project EGLDisplay mDisplay; 94edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project EGLSurface mSurface; 95edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project EGLContext mContext; 96edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project EGLConfig mConfig; 97edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project float mDpiX; 98edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project float mDpiY; 99edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project float mRefreshRate; 100edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project float mDensity; 101edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project int mWidth; 102edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project int mHeight; 103edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project PixelFormat mFormat; 104edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t mFlags; 105edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project mutable Region mDirty; 106edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project sp<EGLDisplaySurface> mDisplaySurface; 107edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project copybit_device_t* mBlitEngine; 108edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project overlay_control_device_t* mOverlayEngine; 109edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; 110edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 111edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android 112edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 113edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#endif // ANDROID_DISPLAY_HARDWARE_H 114