blob: 279e0406c21201710f7765d5603e4912cbf99875 [file] [log] [blame]
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -08001/*
2** Copyright 2006, The Android Open Source Project
3**
Mathias Agopian076b1cc2009-04-10 14:24:30 -07004** 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 Projectedbf3b62009-03-03 19:31:44 -08007**
Mathias Agopian076b1cc2009-04-10 14:24:30 -07008** http://www.apache.org/licenses/LICENSE-2.0
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -08009**
Mathias Agopian076b1cc2009-04-10 14:24:30 -070010** 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 Projectedbf3b62009-03-03 19:31:44 -080014** 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 Agopian7189c002009-05-05 18:11:11 -070033#include <EGL/egl.h>
Mathias Agopian8d2e83b2009-06-24 22:37:39 -070034#include <EGL/eglext.h>
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -080035
36#include "Tokenizer.h"
37#include "TokenManager.h"
38
39
40namespace android {
41
42// ----------------------------------------------------------------------------
43
Mathias Agopian0926f502009-05-04 14:17:04 -070044class EGLTextureObject : public LightRefBase<EGLTextureObject>
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -080045{
46public:
47 EGLTextureObject();
48 ~EGLTextureObject();
49
Mathias Agopian0926f502009-05-04 14:17:04 -070050 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 Projectedbf3b62009-03-03 19:31:44 -080053
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -080054 status_t reallocate(GLint level,
55 int w, int h, int s,
56 int format, int compressedFormat, int bpr);
Mathias Agopian0926f502009-05-04 14:17:04 -070057 inline size_t size() const { return mSize; }
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -080058 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
64private:
65 status_t allocateMipmaps();
66 void freeMipmaps();
67 void init();
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -080068 size_t mSize;
69 GGLSurface *mMipmaps;
70 int mNumExtraLod;
71 bool mIsComplete;
72
73public:
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 Agopian076b1cc2009-04-10 14:24:30 -070083#ifdef LIBAGL_USE_GRALLOC_COPYBITS
Mathias Agopian0a3139a2009-06-10 16:01:54 -070084 bool try_copybit;
Mathias Agopian076b1cc2009-04-10 14:24:30 -070085#endif // LIBAGL_USE_GRALLOC_COPYBITS
Mathias Agopian0926f502009-05-04 14:17:04 -070086 android_native_buffer_t* buffer;
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -080087};
88
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -080089// ----------------------------------------------------------------------------
90
Mathias Agopian0926f502009-05-04 14:17:04 -070091class EGLSurfaceManager :
92 public LightRefBase<EGLSurfaceManager>,
93 public TokenManager
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -080094{
95public:
96 EGLSurfaceManager();
97 ~EGLSurfaceManager();
98
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -080099 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
105private:
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -0800106 mutable Mutex mLock;
107 KeyedVector< GLuint, sp<EGLTextureObject> > mTextures;
108};
109
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -0800110// ----------------------------------------------------------------------------
111}; // namespace android
112
113#endif // ANDROID_OPENGLES_SURFACE_H
114