| The Android Open Source Project | edbf3b6 | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 1 | /* | 
|  | 2 | ** Copyright 2006, The Android Open Source Project | 
|  | 3 | ** | 
| Mathias Agopian | 076b1cc | 2009-04-10 14:24:30 -0700 | [diff] [blame] | 4 | ** Licensed under the Apache License, Version 2.0 (the "License"); | 
|  | 5 | ** you may not use this file except in compliance with the License. | 
|  | 6 | ** You may obtain a copy of the License at | 
| The Android Open Source Project | edbf3b6 | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 7 | ** | 
| Mathias Agopian | 076b1cc | 2009-04-10 14:24:30 -0700 | [diff] [blame] | 8 | **     http://www.apache.org/licenses/LICENSE-2.0 | 
| The Android Open Source Project | edbf3b6 | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 9 | ** | 
| Mathias Agopian | 076b1cc | 2009-04-10 14:24:30 -0700 | [diff] [blame] | 10 | ** Unless required by applicable law or agreed to in writing, software | 
|  | 11 | ** distributed under the License is distributed on an "AS IS" BASIS, | 
|  | 12 | ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | 13 | ** See the License for the specific language governing permissions and | 
| The Android Open Source Project | edbf3b6 | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 14 | ** limitations under the License. | 
|  | 15 | */ | 
|  | 16 |  | 
|  | 17 | #ifndef ANDROID_OPENGLES_SURFACE_H | 
|  | 18 | #define ANDROID_OPENGLES_SURFACE_H | 
|  | 19 |  | 
|  | 20 | #include <stdint.h> | 
|  | 21 | #include <stddef.h> | 
|  | 22 | #include <sys/types.h> | 
|  | 23 |  | 
|  | 24 | #include <utils/Atomic.h> | 
|  | 25 | #include <utils/threads.h> | 
|  | 26 | #include <utils/RefBase.h> | 
|  | 27 | #include <utils/KeyedVector.h> | 
|  | 28 | #include <utils/Errors.h> | 
|  | 29 |  | 
|  | 30 | #include <private/pixelflinger/ggl_context.h> | 
|  | 31 |  | 
|  | 32 | #include <GLES/gl.h> | 
| Mathias Agopian | 7189c00 | 2009-05-05 18:11:11 -0700 | [diff] [blame] | 33 | #include <EGL/egl.h> | 
| Mathias Agopian | 8d2e83b | 2009-06-24 22:37:39 -0700 | [diff] [blame] | 34 | #include <EGL/eglext.h> | 
| The Android Open Source Project | edbf3b6 | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 35 |  | 
|  | 36 | #include "Tokenizer.h" | 
|  | 37 | #include "TokenManager.h" | 
|  | 38 |  | 
|  | 39 |  | 
|  | 40 | namespace android { | 
|  | 41 |  | 
|  | 42 | // ---------------------------------------------------------------------------- | 
|  | 43 |  | 
| Mathias Agopian | 0926f50 | 2009-05-04 14:17:04 -0700 | [diff] [blame] | 44 | class EGLTextureObject : public LightRefBase<EGLTextureObject> | 
| The Android Open Source Project | edbf3b6 | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 45 | { | 
|  | 46 | public: | 
|  | 47 | EGLTextureObject(); | 
|  | 48 | ~EGLTextureObject(); | 
|  | 49 |  | 
| Mathias Agopian | 0926f50 | 2009-05-04 14:17:04 -0700 | [diff] [blame] | 50 | status_t    setSurface(GGLSurface const* s); | 
|  | 51 | status_t    setImage(android_native_buffer_t* buffer); | 
|  | 52 | void        setImageBits(void* vaddr) { surface.data = (GGLubyte*)vaddr; } | 
| The Android Open Source Project | edbf3b6 | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 53 |  | 
| The Android Open Source Project | edbf3b6 | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 54 | status_t            reallocate(GLint level, | 
|  | 55 | int w, int h, int s, | 
|  | 56 | int format, int compressedFormat, int bpr); | 
| Mathias Agopian | 0926f50 | 2009-05-04 14:17:04 -0700 | [diff] [blame] | 57 | inline  size_t      size() const { return mSize; } | 
| The Android Open Source Project | edbf3b6 | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 58 | const GGLSurface&   mip(int lod) const; | 
|  | 59 | GGLSurface&         editMip(int lod); | 
|  | 60 | bool                hasMipmaps() const { return mMipmaps!=0; } | 
|  | 61 | bool                isComplete() const { return mIsComplete; } | 
|  | 62 | void                copyParameters(const sp<EGLTextureObject>& old); | 
|  | 63 |  | 
|  | 64 | private: | 
|  | 65 | status_t        allocateMipmaps(); | 
|  | 66 | void        freeMipmaps(); | 
|  | 67 | void        init(); | 
| The Android Open Source Project | edbf3b6 | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 68 | size_t              mSize; | 
|  | 69 | GGLSurface          *mMipmaps; | 
|  | 70 | int                 mNumExtraLod; | 
|  | 71 | bool                mIsComplete; | 
|  | 72 |  | 
|  | 73 | public: | 
|  | 74 | GGLSurface          surface; | 
|  | 75 | GLenum              wraps; | 
|  | 76 | GLenum              wrapt; | 
|  | 77 | GLenum              min_filter; | 
|  | 78 | GLenum              mag_filter; | 
|  | 79 | GLenum              internalformat; | 
|  | 80 | GLint               crop_rect[4]; | 
|  | 81 | GLint               generate_mipmap; | 
|  | 82 | GLint               direct; | 
| Mathias Agopian | 076b1cc | 2009-04-10 14:24:30 -0700 | [diff] [blame] | 83 | #ifdef LIBAGL_USE_GRALLOC_COPYBITS | 
| Mathias Agopian | 0a3139a | 2009-06-10 16:01:54 -0700 | [diff] [blame] | 84 | bool                try_copybit; | 
| Mathias Agopian | 076b1cc | 2009-04-10 14:24:30 -0700 | [diff] [blame] | 85 | #endif // LIBAGL_USE_GRALLOC_COPYBITS | 
| Mathias Agopian | 0926f50 | 2009-05-04 14:17:04 -0700 | [diff] [blame] | 86 | android_native_buffer_t* buffer; | 
| The Android Open Source Project | edbf3b6 | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 87 | }; | 
|  | 88 |  | 
| The Android Open Source Project | edbf3b6 | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 89 | // ---------------------------------------------------------------------------- | 
|  | 90 |  | 
| Mathias Agopian | 0926f50 | 2009-05-04 14:17:04 -0700 | [diff] [blame] | 91 | class EGLSurfaceManager : | 
|  | 92 | public LightRefBase<EGLSurfaceManager>, | 
|  | 93 | public TokenManager | 
| The Android Open Source Project | edbf3b6 | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 94 | { | 
|  | 95 | public: | 
|  | 96 | EGLSurfaceManager(); | 
|  | 97 | ~EGLSurfaceManager(); | 
|  | 98 |  | 
| The Android Open Source Project | edbf3b6 | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 99 | sp<EGLTextureObject>    createTexture(GLuint name); | 
|  | 100 | sp<EGLTextureObject>    removeTexture(GLuint name); | 
|  | 101 | sp<EGLTextureObject>    replaceTexture(GLuint name); | 
|  | 102 | void                    deleteTextures(GLsizei n, const GLuint *tokens); | 
|  | 103 | sp<EGLTextureObject>    texture(GLuint name); | 
|  | 104 |  | 
|  | 105 | private: | 
| The Android Open Source Project | edbf3b6 | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 106 | mutable Mutex                               mLock; | 
|  | 107 | KeyedVector< GLuint, sp<EGLTextureObject> > mTextures; | 
|  | 108 | }; | 
|  | 109 |  | 
| The Android Open Source Project | edbf3b6 | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 110 | // ---------------------------------------------------------------------------- | 
|  | 111 | }; // namespace android | 
|  | 112 |  | 
|  | 113 | #endif // ANDROID_OPENGLES_SURFACE_H | 
|  | 114 |  |