OSDN Git Service

Add direct rendering for border
authornicolasroard <nicolasroard@google.com>
Sat, 13 Apr 2013 00:47:14 +0000 (17:47 -0700)
committernicolasroard <nicolasroard@google.com>
Sat, 13 Apr 2013 01:07:11 +0000 (18:07 -0700)
bug:8603245

Change-Id: Ibc1bde9adb19f930b474e4076a0c2720fbe0bc8d

src/com/android/gallery3d/filtershow/cache/CachingPipeline.java
src/com/android/gallery3d/filtershow/presets/ImagePreset.java

index b8dc466..8cb8f8f 100644 (file)
@@ -308,6 +308,8 @@ public class CachingPipeline {
             setupEnvironment(preset, false);
             mFiltersManager.freeFilterResources(preset);
             preset.applyFilters(-1, -1, in, out, mEnvironment);
+            // TODO: we should render the border onto a different bitmap instead
+            preset.applyBorder(in, out, mEnvironment);
         }
     }
 
index 791164f..00f5977 100644 (file)
@@ -22,6 +22,7 @@ import android.support.v8.renderscript.Allocation;
 import android.util.Log;
 
 import com.android.gallery3d.filtershow.ImageStateAdapter;
+import com.android.gallery3d.filtershow.cache.CachingPipeline;
 import com.android.gallery3d.filtershow.cache.ImageLoader;
 import com.android.gallery3d.filtershow.filters.BaseFiltersManager;
 import com.android.gallery3d.filtershow.filters.FilterRepresentation;
@@ -228,6 +229,10 @@ public class ImagePreset {
         mBorder = filter;
     }
 
+    public void resetBorder() {
+        mBorder = null;
+    }
+
     public boolean isFx() {
         return mIsFxPreset;
     }
@@ -474,6 +479,16 @@ public class ImagePreset {
         return bitmap;
     }
 
+    public void applyBorder(Allocation in, Allocation out, FilterEnvironment environment) {
+        if (mBorder != null && mDoApplyGeometry) {
+            mBorder.synchronizeRepresentation();
+            // TODO: should keep the bitmap around
+            Allocation bitmapIn = Allocation.createTyped(CachingPipeline.getRenderScriptContext(), in.getType());
+            bitmapIn.copyFrom(out);
+            environment.applyRepresentation(mBorder, bitmapIn, out);
+        }
+    }
+
     public void applyFilters(int from, int to, Allocation in, Allocation out, FilterEnvironment environment) {
         if (mDoApplyFilters) {
             if (from < 0) {