diff options
Diffstat (limited to 'graphics/java/android')
| -rw-r--r-- | graphics/java/android/graphics/drawable/LayerDrawable.java | 7 | ||||
| -rw-r--r-- | graphics/java/android/renderscript/Allocation.java | 77 | ||||
| -rw-r--r-- | graphics/java/android/renderscript/RenderScript.java | 7 |
3 files changed, 71 insertions, 20 deletions
diff --git a/graphics/java/android/graphics/drawable/LayerDrawable.java b/graphics/java/android/graphics/drawable/LayerDrawable.java index 6698d31..383fe71 100644 --- a/graphics/java/android/graphics/drawable/LayerDrawable.java +++ b/graphics/java/android/graphics/drawable/LayerDrawable.java @@ -575,6 +575,11 @@ public class LayerDrawable extends Drawable implements Drawable.Callback { @Override public Drawable mutate() { if (!mMutated && super.mutate() == this) { + if (!mLayerState.canConstantState()) { + throw new IllegalStateException("One or more children of this LayerDrawable does " + + "not have constant state; this drawable cannot be mutated."); + } + mLayerState = new LayerState(mLayerState, this, null); final ChildDrawable[] array = mLayerState.mChildren; final int N = mLayerState.mNum; for (int i = 0; i < N; i++) { @@ -694,7 +699,7 @@ public class LayerDrawable extends Drawable implements Drawable.Callback { return stateful; } - public synchronized boolean canConstantState() { + public boolean canConstantState() { if (!mCheckedConstantState && mChildren != null) { mCanConstantState = true; final int N = mNum; diff --git a/graphics/java/android/renderscript/Allocation.java b/graphics/java/android/renderscript/Allocation.java index 6539ff3..a76a628 100644 --- a/graphics/java/android/renderscript/Allocation.java +++ b/graphics/java/android/renderscript/Allocation.java @@ -131,22 +131,13 @@ public class Allocation extends BaseObj { public static final int USAGE_GRAPHICS_RENDER_TARGET = 0x0010; /** - * USAGE_GRAPHICS_SURFACE_TEXTURE_INPUT_OPAQUE The allocation - * will be used as a SurfaceTexture graphics consumer. This - * usage may only be used with USAGE_GRAPHICS_TEXTURE. - * - * @hide - */ - public static final int USAGE_GRAPHICS_SURFACE_TEXTURE_INPUT_OPAQUE = 0x0020; - - /** * USAGE_IO_INPUT The allocation will be used as SurfaceTexture * consumer. This usage will cause the allocation to be created * read only. * * @hide */ - public static final int USAGE_IO_INPUT = 0x0040; + public static final int USAGE_IO_INPUT = 0x0020; /** * USAGE_IO_OUTPUT The allocation will be used as a @@ -155,7 +146,7 @@ public class Allocation extends BaseObj { * * @hide */ - public static final int USAGE_IO_OUTPUT = 0x0080; + public static final int USAGE_IO_OUTPUT = 0x0040; /** * Controls mipmap behavior when using the bitmap creation and @@ -197,6 +188,40 @@ public class Allocation extends BaseObj { return getID(); } + + /** + * Get the element of the type of the Allocation. + * + * @hide + * @return Element + * + */ + public Element getElement() { + return mType.getElement(); + } + + /** + * Get the usage flags of the Allocation. + * + * @hide + * @return usage + * + */ + public int getUsage() { + return mUsage; + } + + /** + * Get the size of the Allocation in bytes. + * + * @hide + * @return sizeInBytes + * + */ + public int getSizeBytes() { + return mType.getCount() * mType.getElement().getSizeBytes(); + } + private void updateCacheInfo(Type t) { mCurrentDimX = t.getX(); mCurrentDimY = t.getY(); @@ -217,17 +242,15 @@ public class Allocation extends BaseObj { USAGE_GRAPHICS_VERTEX | USAGE_GRAPHICS_CONSTANTS | USAGE_GRAPHICS_RENDER_TARGET | - USAGE_GRAPHICS_SURFACE_TEXTURE_INPUT_OPAQUE | USAGE_IO_INPUT | USAGE_IO_OUTPUT)) != 0) { throw new RSIllegalArgumentException("Unknown usage specified."); } - if ((usage & (USAGE_GRAPHICS_SURFACE_TEXTURE_INPUT_OPAQUE | USAGE_IO_INPUT)) != 0) { + if ((usage & USAGE_IO_INPUT) != 0) { mWriteAllowed = false; - if ((usage & ~(USAGE_GRAPHICS_SURFACE_TEXTURE_INPUT_OPAQUE | - USAGE_IO_INPUT | + if ((usage & ~(USAGE_IO_INPUT | USAGE_GRAPHICS_TEXTURE | USAGE_SCRIPT)) != 0) { throw new RSIllegalArgumentException("Invalid usage combination."); @@ -305,10 +328,21 @@ public class Allocation extends BaseObj { } } + /** + * Get the type of the Allocation. + * + * @return Type + * + */ public Type getType() { return mType; } + /** + * Propagate changes from one usage of the allocation to the + * remaining usages of the allocation. + * + */ public void syncAll(int srcLocation) { switch (srcLocation) { case USAGE_SCRIPT: @@ -348,12 +382,17 @@ public class Allocation extends BaseObj { public void ioGetInput() { if ((mUsage & USAGE_IO_INPUT) == 0) { throw new RSIllegalArgumentException( - "Can only send buffer if IO_OUTPUT usage specified."); + "Can only receive if IO_INPUT usage specified."); } mRS.validate(); mRS.nAllocationIoReceive(getID()); } + /** + * Copy an array of RS objects to the allocation. + * + * @param d Source array. + */ public void copyFrom(BaseObj[] d) { mRS.validate(); validateIsObject(); @@ -1134,13 +1173,15 @@ public class Allocation extends BaseObj { * */ public SurfaceTexture getSurfaceTexture() { - if ((mUsage & USAGE_GRAPHICS_SURFACE_TEXTURE_INPUT_OPAQUE) == 0) { + if ((mUsage & USAGE_IO_INPUT) == 0) { throw new RSInvalidStateException("Allocation is not a surface texture."); } int id = mRS.nAllocationGetSurfaceTextureID(getID()); - return new SurfaceTexture(id); + SurfaceTexture st = new SurfaceTexture(id); + mRS.nAllocationGetSurfaceTextureID2(getID(), st); + return st; } /** diff --git a/graphics/java/android/renderscript/RenderScript.java b/graphics/java/android/renderscript/RenderScript.java index 6921f37..ab6ba54 100644 --- a/graphics/java/android/renderscript/RenderScript.java +++ b/graphics/java/android/renderscript/RenderScript.java @@ -16,8 +16,8 @@ package android.renderscript; -import java.lang.reflect.Field; import java.io.File; +import java.lang.reflect.Field; import android.content.Context; import android.content.pm.ApplicationInfo; @@ -294,6 +294,11 @@ public class RenderScript { validate(); return rsnAllocationGetSurfaceTextureID(mContext, alloc); } + native void rsnAllocationGetSurfaceTextureID2(int con, int alloc, SurfaceTexture st); + synchronized void nAllocationGetSurfaceTextureID2(int alloc, SurfaceTexture st) { + validate(); + rsnAllocationGetSurfaceTextureID2(mContext, alloc, st); + } native void rsnAllocationSetSurfaceTexture(int con, int alloc, SurfaceTexture sur); synchronized void nAllocationSetSurfaceTexture(int alloc, SurfaceTexture sur) { validate(); |
