diff options
Diffstat (limited to 'src/com/android/gallery3d/glrenderer/GLES11Canvas.java')
-rw-r--r-- | src/com/android/gallery3d/glrenderer/GLES11Canvas.java | 78 |
1 files changed, 38 insertions, 40 deletions
diff --git a/src/com/android/gallery3d/glrenderer/GLES11Canvas.java b/src/com/android/gallery3d/glrenderer/GLES11Canvas.java index e4f7d1ac4..a4ffa2a2c 100644 --- a/src/com/android/gallery3d/glrenderer/GLES11Canvas.java +++ b/src/com/android/gallery3d/glrenderer/GLES11Canvas.java @@ -40,7 +40,7 @@ import javax.microedition.khronos.opengles.GL11; import javax.microedition.khronos.opengles.GL11Ext; import javax.microedition.khronos.opengles.GL11ExtensionPack; -public class GLES11Canvas extends GLCanvas { +public class GLES11Canvas implements GLCanvas { @SuppressWarnings("unused") private static final String TAG = "GLCanvasImp"; @@ -95,7 +95,34 @@ public class GLES11Canvas extends GLCanvas { int mCountTextureRect; int mCountTextureOES; - GLES11Canvas() { + private static GLId mGLId = new GLES11IdImpl(); + + public GLES11Canvas(GL11 gl) { + mGL = gl; + mGLState = new GLState(gl); + // First create an nio buffer, then create a VBO from it. + int size = BOX_COORDINATES.length * Float.SIZE / Byte.SIZE; + FloatBuffer xyBuffer = allocateDirectNativeOrderBuffer(size).asFloatBuffer(); + xyBuffer.put(BOX_COORDINATES, 0, BOX_COORDINATES.length).position(0); + + int[] name = new int[1]; + mGLId.glGenBuffers(1, name, 0); + mBoxCoords = name[0]; + + gl.glBindBuffer(GL11.GL_ARRAY_BUFFER, mBoxCoords); + gl.glBufferData(GL11.GL_ARRAY_BUFFER, xyBuffer.capacity() * (Float.SIZE / Byte.SIZE), + xyBuffer, GL11.GL_STATIC_DRAW); + + gl.glVertexPointer(2, GL11.GL_FLOAT, 0, 0); + gl.glTexCoordPointer(2, GL11.GL_FLOAT, 0, 0); + + // Enable the texture coordinate array for Texture 1 + gl.glClientActiveTexture(GL11.GL_TEXTURE1); + gl.glTexCoordPointer(2, GL11.GL_FLOAT, 0, 0); + gl.glClientActiveTexture(GL11.GL_TEXTURE0); + gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY); + + // mMatrixValues and mAlpha will be initialized in setSize() } @Override @@ -148,37 +175,6 @@ public class GLES11Canvas extends GLCanvas { } @Override - public void initialize(GL11 gl) { - mGL = gl; - mGLState = new GLState(gl); - // First create an nio buffer, then create a VBO from it. - int size = BOX_COORDINATES.length * Float.SIZE / Byte.SIZE; - FloatBuffer xyBuffer = allocateDirectNativeOrderBuffer(size).asFloatBuffer(); - xyBuffer.put(BOX_COORDINATES, 0, BOX_COORDINATES.length).position(0); - - int[] name = new int[1]; - GLId glId = getGLId(); - glId.glGenBuffers(1, name, 0); - mBoxCoords = name[0]; - - gl.glBindBuffer(GL11.GL_ARRAY_BUFFER, mBoxCoords); - gl.glBufferData(GL11.GL_ARRAY_BUFFER, - xyBuffer.capacity() * (Float.SIZE / Byte.SIZE), - xyBuffer, GL11.GL_STATIC_DRAW); - - gl.glVertexPointer(2, GL11.GL_FLOAT, 0, 0); - gl.glTexCoordPointer(2, GL11.GL_FLOAT, 0, 0); - - // Enable the texture coordinate array for Texture 1 - gl.glClientActiveTexture(GL11.GL_TEXTURE1); - gl.glTexCoordPointer(2, GL11.GL_FLOAT, 0, 0); - gl.glClientActiveTexture(GL11.GL_TEXTURE0); - gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY); - - // mMatrixValues and mAlpha will be initialized in setSize() - } - - @Override public void drawRect(float x, float y, float width, float height, GLPaint paint) { GL11 gl = mGL; @@ -751,15 +747,14 @@ public class GLES11Canvas extends GLCanvas { public void deleteRecycledResources() { synchronized (mUnboundTextures) { IntArray ids = mUnboundTextures; - GLId glId = getGLId(); if (ids.size() > 0) { - glId.glDeleteTextures(mGL, ids.size(), ids.getInternalArray(), 0); + mGLId.glDeleteTextures(mGL, ids.size(), ids.getInternalArray(), 0); ids.clear(); } ids = mDeleteBuffers; if (ids.size() > 0) { - glId.glDeleteBuffers(mGL, ids.size(), ids.getInternalArray(), 0); + mGLId.glDeleteBuffers(mGL, ids.size(), ids.getInternalArray(), 0); ids.clear(); } } @@ -860,8 +855,7 @@ public class GLES11Canvas extends GLCanvas { GL11ExtensionPack gl11ep = (GL11ExtensionPack) mGL; if (mTargetTexture == null && texture != null) { - GLId glId = getGLId(); - glId.glGenBuffers(1, mFrameBuffer, 0); + mGLId.glGenBuffers(1, mFrameBuffer, 0); gl11ep.glBindFramebufferOES( GL11ExtensionPack.GL_FRAMEBUFFER_OES, mFrameBuffer[0]); } @@ -990,8 +984,7 @@ public class GLES11Canvas extends GLCanvas { private int uploadBuffer(Buffer buf, int elementSize) { int[] bufferIds = new int[1]; - GLId glId = getGLId(); - glId.glGenBuffers(bufferIds.length, bufferIds, 0); + mGLId.glGenBuffers(bufferIds.length, bufferIds, 0); int bufferId = bufferIds[0]; mGL.glBindBuffer(GL11.GL_ARRAY_BUFFER, bufferId); mGL.glBufferData(GL11.GL_ARRAY_BUFFER, buf.capacity() * elementSize, buf, @@ -1047,4 +1040,9 @@ public class GLES11Canvas extends GLCanvas { public void getBounds(Rect bounds, int x, int y, int width, int height) { // This is only required for GLES20 } + + @Override + public GLId getGLId() { + return mGLId; + } } |