1877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy/* 2877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy * Copyright (C) 2013 The Android Open Source Project 3877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy * 4877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy * Licensed under the Apache License, Version 2.0 (the "License"); 5877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy * you may not use this file except in compliance with the License. 6877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy * You may obtain a copy of the License at 7877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy * 8877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy * http://www.apache.org/licenses/LICENSE-2.0 9877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy * 10877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy * Unless required by applicable law or agreed to in writing, software 11877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy * distributed under the License is distributed on an "AS IS" BASIS, 12877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy * See the License for the specific language governing permissions and 14877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy * limitations under the License. 15877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy */ 16877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy 17877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy#ifndef ANDROID_HWUI_IMAGE_H 18877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy#define ANDROID_HWUI_IMAGE_H 19877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy 20877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy#include <EGL/egl.h> 21877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy#include <EGL/eglext.h> 22877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy 23877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy#include <GLES2/gl2.h> 24877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy#include <GLES2/gl2ext.h> 25877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy 26877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy#include <ui/GraphicBuffer.h> 27877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy 28877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guynamespace android { 29877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guynamespace uirenderer { 30877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy 31877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy/** 32877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy * A simple wrapper that creates an EGLImage and a texture for a GraphicBuffer. 33877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy */ 34877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guyclass Image { 35877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guypublic: 36877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy /** 37877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy * Creates a new image from the specified graphic buffer. If the image 38877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy * cannot be created, getTexture() will return 0 and getImage() will 39877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy * return EGL_NO_IMAGE_KHR. 40877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy */ 4149796451cb9d1dae580618eb320ef3c5e6d90cd4Chih-Hung Hsieh explicit Image(sp<GraphicBuffer> buffer); 421212c9dafe932f70956651338568c5e1fdf21bcfRomain Guy ~Image(); 43877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy 44877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy /** 45877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy * Returns the name of the GL texture that can be used to sample 46877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy * from this image. 47877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy */ 48877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy GLuint getTexture() const { 49877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy return mTexture; 50877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy } 51877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy 52877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy /** 53877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy * Returns the name of the EGL image represented by this object. 54877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy */ 55877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy EGLImageKHR getImage() const { 56877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy return mImage; 57877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy } 58877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy 59877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guyprivate: 60877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy GLuint mTexture; 61877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy EGLImageKHR mImage; 62877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy}; // class Image 63877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy 64877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy}; // namespace uirenderer 65877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy}; // namespace android 66877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy 67877cfe0e32a845d5a58252b8a6e1f54f95b4379cRomain Guy#endif // ANDROID_HWUI_IMAGE_H 68