| /* |
| ** Copyright 2006, The Android Open Source Project |
| ** |
| ** Licensed under the Apache License, Version 2.0 (the "License"); |
| ** you may not use this file except in compliance with the License. |
| ** You may obtain a copy of the License at |
| ** |
| ** http://www.apache.org/licenses/LICENSE-2.0 |
| ** |
| ** Unless required by applicable law or agreed to in writing, software |
| ** distributed under the License is distributed on an "AS IS" BASIS, |
| ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| ** See the License for the specific language governing permissions and |
| ** limitations under the License. |
| */ |
| |
| #ifndef ANDROID_OPENGLES_SURFACE_H |
| #define ANDROID_OPENGLES_SURFACE_H |
| |
| #include <stdint.h> |
| #include <stddef.h> |
| #include <sys/types.h> |
| |
| #include <cutils/atomic.h> |
| #include <utils/threads.h> |
| #include <utils/RefBase.h> |
| #include <utils/KeyedVector.h> |
| #include <utils/Errors.h> |
| |
| #include <private/pixelflinger/ggl_context.h> |
| |
| #include <GLES/gl.h> |
| #include <EGL/egl.h> |
| #include <EGL/eglext.h> |
| |
| #include "Tokenizer.h" |
| #include "TokenManager.h" |
| |
| |
| namespace android { |
| |
| // ---------------------------------------------------------------------------- |
| |
| class EGLTextureObject : public LightRefBase<EGLTextureObject> |
| { |
| public: |
| EGLTextureObject(); |
| ~EGLTextureObject(); |
| |
| status_t setSurface(GGLSurface const* s); |
| status_t setImage(ANativeWindowBuffer* buffer); |
| void setImageBits(void* vaddr) { surface.data = (GGLubyte*)vaddr; } |
| |
| status_t reallocate(GLint level, |
| int w, int h, int s, |
| int format, int compressedFormat, int bpr); |
| inline size_t size() const { return mSize; } |
| const GGLSurface& mip(int lod) const; |
| GGLSurface& editMip(int lod); |
| bool hasMipmaps() const { return mMipmaps!=0; } |
| bool isComplete() const { return mIsComplete; } |
| void copyParameters(const sp<EGLTextureObject>& old); |
| |
| private: |
| status_t allocateMipmaps(); |
| void freeMipmaps(); |
| void init(); |
| size_t mSize; |
| GGLSurface *mMipmaps; |
| int mNumExtraLod; |
| bool mIsComplete; |
| |
| public: |
| GGLSurface surface; |
| GLenum wraps; |
| GLenum wrapt; |
| GLenum min_filter; |
| GLenum mag_filter; |
| GLenum internalformat; |
| GLint crop_rect[4]; |
| GLint generate_mipmap; |
| GLint direct; |
| ANativeWindowBuffer* buffer; |
| }; |
| |
| // ---------------------------------------------------------------------------- |
| |
| class EGLSurfaceManager : |
| public LightRefBase<EGLSurfaceManager>, |
| public TokenManager |
| { |
| public: |
| EGLSurfaceManager(); |
| ~EGLSurfaceManager(); |
| |
| sp<EGLTextureObject> createTexture(GLuint name); |
| sp<EGLTextureObject> removeTexture(GLuint name); |
| sp<EGLTextureObject> replaceTexture(GLuint name); |
| void deleteTextures(GLsizei n, const GLuint *tokens); |
| sp<EGLTextureObject> texture(GLuint name); |
| |
| private: |
| mutable Mutex mLock; |
| KeyedVector< GLuint, sp<EGLTextureObject> > mTextures; |
| }; |
| |
| // ---------------------------------------------------------------------------- |
| }; // namespace android |
| |
| #endif // ANDROID_OPENGLES_SURFACE_H |
| |