blob: de9e03eab852b8b2cb2326e7c0f52a10810acc70 [file] [log] [blame]
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001/*
2** Copyright 2006, The Android Open Source Project
3**
Mathias Agopian1473f462009-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 Project9066cfe2009-03-03 19:31:44 -08007**
Mathias Agopian1473f462009-04-10 14:24:30 -07008** http://www.apache.org/licenses/LICENSE-2.0
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08009**
Mathias Agopian1473f462009-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 Project9066cfe2009-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 Agopianac2523b2009-05-05 18:11:11 -070033#include <EGL/egl.h>
Mathias Agopianc1e3ec52009-06-24 22:37:39 -070034#include <EGL/eglext.h>
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080035
36#include "Tokenizer.h"
37#include "TokenManager.h"
38
39
40namespace android {
41
42// ----------------------------------------------------------------------------
43
Mathias Agopiandff8e582009-05-04 14:17:04 -070044class EGLTextureObject : public LightRefBase<EGLTextureObject>
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080045{
46public:
47 EGLTextureObject();
48 ~EGLTextureObject();
49
Mathias Agopiandff8e582009-05-04 14:17:04 -070050 status_t setSurface(GGLSurface const* s);
Iliyan Malchevb2a153a2011-05-01 11:33:26 -070051 status_t setImage(ANativeWindowBuffer* buffer);
Mathias Agopiandff8e582009-05-04 14:17:04 -070052 void setImageBits(void* vaddr) { surface.data = (GGLubyte*)vaddr; }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080053
The Android Open Source Project9066cfe2009-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 Agopiandff8e582009-05-04 14:17:04 -070057 inline size_t size() const { return mSize; }
The Android Open Source Project9066cfe2009-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 Project9066cfe2009-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;
Iliyan Malchevb2a153a2011-05-01 11:33:26 -070083 ANativeWindowBuffer* buffer;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080084};
85
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080086// ----------------------------------------------------------------------------
87
Mathias Agopiandff8e582009-05-04 14:17:04 -070088class EGLSurfaceManager :
89 public LightRefBase<EGLSurfaceManager>,
90 public TokenManager
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080091{
92public:
93 EGLSurfaceManager();
94 ~EGLSurfaceManager();
95
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080096 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
102private:
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800103 mutable Mutex mLock;
104 KeyedVector< GLuint, sp<EGLTextureObject> > mTextures;
105};
106
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800107// ----------------------------------------------------------------------------
108}; // namespace android
109
110#endif // ANDROID_OPENGLES_SURFACE_H
111