1 /* 2 ** Copyright 2006, The Android Open Source Project 3 ** 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 7 ** 8 ** http://www.apache.org/licenses/LICENSE-2.0 9 ** 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 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 <cutils/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> 33 #include <EGL/egl.h> 34 #include <EGL/eglext.h> 35 36 #include "Tokenizer.h" 37 #include "TokenManager.h" 38 39 40 namespace android { 41 42 // ---------------------------------------------------------------------------- 43 44 class EGLTextureObject : public LightRefBase<EGLTextureObject> 45 { 46 public: 47 EGLTextureObject(); 48 ~EGLTextureObject(); 49 50 status_t setSurface(GGLSurface const* s); 51 status_t setImage(ANativeWindowBuffer* buffer); setImageBits(void * vaddr)52 void setImageBits(void* vaddr) { surface.data = (GGLubyte*)vaddr; } 53 54 status_t reallocate(GLint level, 55 int w, int h, int s, 56 int format, int compressedFormat, int bpr); size()57 inline size_t size() const { return mSize; } 58 const GGLSurface& mip(int lod) const; 59 GGLSurface& editMip(int lod); hasMipmaps()60 bool hasMipmaps() const { return mMipmaps!=0; } isComplete()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(); 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; 83 ANativeWindowBuffer* buffer; 84 }; 85 86 // ---------------------------------------------------------------------------- 87 88 class EGLSurfaceManager : 89 public LightRefBase<EGLSurfaceManager>, 90 public TokenManager 91 { 92 public: 93 EGLSurfaceManager(); 94 ~EGLSurfaceManager(); 95 96 sp<EGLTextureObject> createTexture(GLuint name); 97 sp<EGLTextureObject> removeTexture(GLuint name); 98 sp<EGLTextureObject> replaceTexture(GLuint name); 99 void deleteTextures(GLsizei n, const GLuint *tokens); 100 sp<EGLTextureObject> texture(GLuint name); 101 102 private: 103 mutable Mutex mLock; 104 KeyedVector< GLuint, sp<EGLTextureObject> > mTextures; 105 }; 106 107 // ---------------------------------------------------------------------------- 108 }; // namespace android 109 110 #endif // ANDROID_OPENGLES_SURFACE_H 111 112