summaryrefslogtreecommitdiffstats
path: root/core/java/android/view
diff options
context:
space:
mode:
Diffstat (limited to 'core/java/android/view')
-rw-r--r--core/java/android/view/GLES20Canvas.java24
-rw-r--r--core/java/android/view/GLES20Layer.java56
-rw-r--r--core/java/android/view/HardwareCanvas.java9
-rw-r--r--core/java/android/view/ViewGroup.java3
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,