diff options
Diffstat (limited to 'core/java/android/view')
-rw-r--r-- | core/java/android/view/GLES20Canvas.java | 24 | ||||
-rw-r--r-- | core/java/android/view/GLES20Layer.java | 56 | ||||
-rw-r--r-- | core/java/android/view/HardwareCanvas.java | 9 | ||||
-rw-r--r-- | core/java/android/view/ViewGroup.java | 3 |
4 files changed, 36 insertions, 56 deletions
diff --git a/core/java/android/view/GLES20Canvas.java b/core/java/android/view/GLES20Canvas.java index 7dd6cc6..5fac525 100644 --- a/core/java/android/view/GLES20Canvas.java +++ b/core/java/android/view/GLES20Canvas.java @@ -83,9 +83,9 @@ class GLES20Canvas extends HardwareCanvas { /** * Creates a canvas to render into an FBO. */ - GLES20Canvas(int fbo, boolean translucent) { + GLES20Canvas(int layer, boolean translucent) { mOpaque = !translucent; - mRenderer = nCreateLayerRenderer(fbo); + mRenderer = nCreateLayerRenderer(layer); setupFinalizer(); } @@ -114,7 +114,7 @@ class GLES20Canvas extends HardwareCanvas { } private static native int nCreateRenderer(); - private static native int nCreateLayerRenderer(int fbo); + private static native int nCreateLayerRenderer(int layer); private static native int nGetDisplayListRenderer(int renderer); private static native void nDestroyRenderer(int renderer); @@ -156,11 +156,10 @@ class GLES20Canvas extends HardwareCanvas { // Hardware layers /////////////////////////////////////////////////////////////////////////// - static native int nCreateLayer(int width, int height, int[] layerInfo); - static native void nResizeLayer(int layerId, int layerTextureId, int width, int height, - int[] layerInfo); - static native void nDestroyLayer(int layerId, int layerTextureId); - static native void nDestroyLayerDeferred(int layerId, int layerTextureId); + static native int nCreateLayer(int width, int height, boolean isOpaque, int[] layerInfo); + static native void nResizeLayer(int layerId, int width, int height, int[] layerInfo); + static native void nDestroyLayer(int layerId); + static native void nDestroyLayerDeferred(int layerId); /////////////////////////////////////////////////////////////////////////// // Canvas management @@ -257,18 +256,15 @@ class GLES20Canvas extends HardwareCanvas { // Hardware layer /////////////////////////////////////////////////////////////////////////// - void drawHardwareLayer(float left, float top, float right, float bottom, - HardwareLayer layer, Paint paint) { + void drawHardwareLayer(HardwareLayer layer, float x, float y, Paint paint) { final GLES20Layer glLayer = (GLES20Layer) layer; boolean hasColorFilter = paint != null && setupColorFilter(paint); final int nativePaint = paint == null ? 0 : paint.mNativePaint; - nDrawLayer(mRenderer, left, top, right, bottom, glLayer.mLayerTextureId, - glLayer.getU(), glLayer.getV(), nativePaint); + nDrawLayer(mRenderer, glLayer.getLayer(), x, y, nativePaint); if (hasColorFilter) nResetModifiers(mRenderer); } - private native void nDrawLayer(int renderer, float left, float top, float right, float bottom, - int layerTexture, float u, float v, int paint); + private native void nDrawLayer(int renderer, int layer, float x, float y, int paint); void interrupt() { nInterrupt(mRenderer); diff --git a/core/java/android/view/GLES20Layer.java b/core/java/android/view/GLES20Layer.java index 7587657..0230430 100644 --- a/core/java/android/view/GLES20Layer.java +++ b/core/java/android/view/GLES20Layer.java @@ -22,52 +22,45 @@ import android.graphics.Canvas; * An OpenGL ES 2.0 implementation of {@link HardwareLayer}. */ class GLES20Layer extends HardwareLayer { - private int mLayerId; - int mLayerTextureId; + private int mLayer; private int mLayerWidth; private int mLayerHeight; private final GLES20Canvas mCanvas; - private float mU; - private float mV; - @SuppressWarnings({"FieldCanBeLocal", "UnusedDeclaration"}) private final Finalizer mFinalizer; GLES20Layer(int width, int height, boolean isOpaque) { super(width, height, isOpaque); - int[] layerInfo = new int[3]; - mLayerId = GLES20Canvas.nCreateLayer(width, height, layerInfo); - if (mLayerId != 0) { + int[] layerInfo = new int[2]; + mLayer = GLES20Canvas.nCreateLayer(width, height, isOpaque, layerInfo); + if (mLayer != 0) { mLayerWidth = layerInfo[0]; mLayerHeight = layerInfo[1]; - mLayerTextureId = layerInfo[2]; - mCanvas = new GLES20Canvas(mLayerId, !isOpaque); - mFinalizer = new Finalizer(mLayerId, mLayerTextureId); - - mU = mWidth / (float) mLayerWidth; - mV = mHeight/ (float) mLayerHeight; + mCanvas = new GLES20Canvas(mLayer, !isOpaque); + mFinalizer = new Finalizer(mLayer); } else { mCanvas = null; mFinalizer = null; } } - float getU() { - return mU; - } - - float getV() { - return mV; + /** + * Returns the native layer object used to render this layer. + * + * @return A pointer to the native layer object, or 0 if the object is NULL + */ + public int getLayer() { + return mLayer; } @Override boolean isValid() { - return mLayerId != 0 && mLayerWidth > 0 && mLayerHeight > 0; + return mLayer != 0 && mLayerWidth > 0 && mLayerHeight > 0; } @Override @@ -77,15 +70,12 @@ class GLES20Layer extends HardwareLayer { mWidth = width; mHeight = height; - int[] layerInfo = new int[3]; + int[] layerInfo = new int[2]; - GLES20Canvas.nResizeLayer(mLayerId, mLayerTextureId, width, height, layerInfo); + GLES20Canvas.nResizeLayer(mLayer, width, height, layerInfo); mLayerWidth = layerInfo[0]; mLayerHeight = layerInfo[1]; - - mU = mWidth / (float) mLayerWidth; - mV = mHeight/ (float) mLayerHeight; } } @@ -112,23 +102,21 @@ class GLES20Layer extends HardwareLayer { @Override void destroy() { mFinalizer.destroy(); - mLayerId = mLayerTextureId = 0; + mLayer = 0; } private static class Finalizer { private int mLayerId; - private int mLayerTextureId; - public Finalizer(int layerId, int layerTextureId) { + public Finalizer(int layerId) { mLayerId = layerId; - mLayerTextureId = layerTextureId; } @Override protected void finalize() throws Throwable { try { - if (mLayerId != 0 || mLayerTextureId != 0) { - GLES20Canvas.nDestroyLayerDeferred(mLayerId, mLayerTextureId); + if (mLayerId != 0) { + GLES20Canvas.nDestroyLayerDeferred(mLayerId); } } finally { super.finalize(); @@ -136,8 +124,8 @@ class GLES20Layer extends HardwareLayer { } void destroy() { - GLES20Canvas.nDestroyLayer(mLayerId, mLayerTextureId); - mLayerId = mLayerTextureId = 0; + GLES20Canvas.nDestroyLayer(mLayerId); + mLayerId = 0; } } } diff --git a/core/java/android/view/HardwareCanvas.java b/core/java/android/view/HardwareCanvas.java index 1a5df98..2273238 100644 --- a/core/java/android/view/HardwareCanvas.java +++ b/core/java/android/view/HardwareCanvas.java @@ -54,13 +54,10 @@ abstract class HardwareCanvas extends Canvas { /** * Draws the specified layer onto this canvas. * - * @param left The left coordinate of the layer - * @param top The top coordinate of the layer - * @param right The right coordinate of the layer - * @param bottom The bottom coordinate of the layer * @param layer The layer to composite on this canvas + * @param x The left coordinate of the layer + * @param y The top coordinate of the layer * @param paint The paint used to draw the layer */ - abstract void drawHardwareLayer(float left, float top, float right, float bottom, - HardwareLayer layer, Paint paint); + abstract void drawHardwareLayer(HardwareLayer layer, float x, float y, Paint paint); } diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java index ed5eed1..86b07fb 100644 --- a/core/java/android/view/ViewGroup.java +++ b/core/java/android/view/ViewGroup.java @@ -2391,8 +2391,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager if (!layerSaved && layerType == LAYER_TYPE_HARDWARE) { final HardwareLayer layer = child.getHardwareLayer(canvas); if (layer != null && layer.isValid()) { - ((HardwareCanvas) canvas).drawHardwareLayer(0, 0, cr - cl, cb - ct, - layer, child.mLayerPaint); + ((HardwareCanvas) canvas).drawHardwareLayer(layer, 0, 0, child.mLayerPaint); layerRendered = true; } else { canvas.saveLayer(sx, sy, sx + cr - cl, sy + cb - ct, child.mLayerPaint, |