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