1edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project/*
2edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** Copyright 2006, The Android Open Source Project
3edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project**
4076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian** Licensed under the Apache License, Version 2.0 (the "License");
5076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian** you may not use this file except in compliance with the License.
6076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian** You may obtain a copy of the License at
7edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project**
8076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian**     http://www.apache.org/licenses/LICENSE-2.0
9edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project**
10076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian** Unless required by applicable law or agreed to in writing, software
11076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian** distributed under the License is distributed on an "AS IS" BASIS,
12076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian** 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_OPENGLES_SURFACE_H
18edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#define ANDROID_OPENGLES_SURFACE_H
19edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
20edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <stdint.h>
21edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <stddef.h>
22edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <sys/types.h>
23edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
24edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/Atomic.h>
25edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/threads.h>
26edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/RefBase.h>
27edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/KeyedVector.h>
28edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/Errors.h>
29edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
30edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <private/pixelflinger/ggl_context.h>
31edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
32edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <GLES/gl.h>
337189c0054e29a66d945f5657c48d5ecf538ea511Mathias Agopian#include <EGL/egl.h>
348d2e83b9f44c7f2207a312fcfda8eb3a4c26745fMathias Agopian#include <EGL/eglext.h>
35edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
36edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include "Tokenizer.h"
37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include "TokenManager.h"
38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
39edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
40edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android {
41edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
42edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ----------------------------------------------------------------------------
43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
440926f50664c739eaee60341f8e8c694dc9a4f3ebMathias Agopianclass EGLTextureObject : public LightRefBase<EGLTextureObject>
45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
46edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic:
47edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                    EGLTextureObject();
48edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                   ~EGLTextureObject();
49edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
500926f50664c739eaee60341f8e8c694dc9a4f3ebMathias Agopian    status_t    setSurface(GGLSurface const* s);
51697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev    status_t    setImage(ANativeWindowBuffer* buffer);
520926f50664c739eaee60341f8e8c694dc9a4f3ebMathias Agopian    void        setImageBits(void* vaddr) { surface.data = (GGLubyte*)vaddr; }
53edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
54edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    status_t            reallocate(GLint level,
55edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                            int w, int h, int s,
56edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                            int format, int compressedFormat, int bpr);
570926f50664c739eaee60341f8e8c694dc9a4f3ebMathias Agopian    inline  size_t      size() const { return mSize; }
58edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    const GGLSurface&   mip(int lod) const;
59edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    GGLSurface&         editMip(int lod);
60edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    bool                hasMipmaps() const { return mMipmaps!=0; }
61edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    bool                isComplete() const { return mIsComplete; }
62edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    void                copyParameters(const sp<EGLTextureObject>& old);
63edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
64edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectprivate:
65edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        status_t        allocateMipmaps();
66edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void        freeMipmaps();
67edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void        init();
68edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    size_t              mSize;
69edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    GGLSurface          *mMipmaps;
70edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    int                 mNumExtraLod;
71edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    bool                mIsComplete;
72edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
73edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic:
74edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    GGLSurface          surface;
75edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    GLenum              wraps;
76edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    GLenum              wrapt;
77edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    GLenum              min_filter;
78edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    GLenum              mag_filter;
79edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    GLenum              internalformat;
80edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    GLint               crop_rect[4];
81edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    GLint               generate_mipmap;
82edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    GLint               direct;
83697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev    ANativeWindowBuffer* buffer;
84edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project};
85edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
86edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ----------------------------------------------------------------------------
87edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
880926f50664c739eaee60341f8e8c694dc9a4f3ebMathias Agopianclass EGLSurfaceManager :
890926f50664c739eaee60341f8e8c694dc9a4f3ebMathias Agopian    public LightRefBase<EGLSurfaceManager>,
900926f50664c739eaee60341f8e8c694dc9a4f3ebMathias Agopian    public TokenManager
91edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
92edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic:
93edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                EGLSurfaceManager();
94edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                ~EGLSurfaceManager();
95edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
96edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    sp<EGLTextureObject>    createTexture(GLuint name);
97edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    sp<EGLTextureObject>    removeTexture(GLuint name);
98edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    sp<EGLTextureObject>    replaceTexture(GLuint name);
99edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    void                    deleteTextures(GLsizei n, const GLuint *tokens);
100edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    sp<EGLTextureObject>    texture(GLuint name);
101edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
102edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectprivate:
103edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    mutable Mutex                               mLock;
104edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    KeyedVector< GLuint, sp<EGLTextureObject> > mTextures;
105edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project};
106edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
107edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ----------------------------------------------------------------------------
108edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android
109edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
110edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#endif // ANDROID_OPENGLES_SURFACE_H
111edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
112