summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarco Nelissen <marcone@google.com>2011-01-18 15:14:47 -0800
committerAndroid Git Automerger <android-git-automerger@android.com>2011-01-18 15:14:47 -0800
commit5577d11fbbea6acf733d3d9d588c7f40484a0e66 (patch)
treedada5d8a0690f160cf8b70bfddf85923373c6073
parent5be4dece805ec4f00a9f707d14eaa0890de6b544 (diff)
parentf50de7e2660498d0c606597982639090ac1a8235 (diff)
downloadandroid_packages_wallpapers_MagicSmoke-5577d11fbbea6acf733d3d9d588c7f40484a0e66.tar.gz
android_packages_wallpapers_MagicSmoke-5577d11fbbea6acf733d3d9d588c7f40484a0e66.tar.bz2
android_packages_wallpapers_MagicSmoke-5577d11fbbea6acf733d3d9d588c7f40484a0e66.zip
am f50de7e2: Fix Magic Smoke crash and clarify why we use getPixels
* commit 'f50de7e2660498d0c606597982639090ac1a8235': Fix Magic Smoke crash and clarify why we use getPixels
-rw-r--r--src/com/android/magicsmoke/MagicSmokeRS.java13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/com/android/magicsmoke/MagicSmokeRS.java b/src/com/android/magicsmoke/MagicSmokeRS.java
index 0731ef2..6b0e8ff 100644
--- a/src/com/android/magicsmoke/MagicSmokeRS.java
+++ b/src/com/android/magicsmoke/MagicSmokeRS.java
@@ -253,6 +253,8 @@ class MagicSmokeRS extends RenderScriptScene implements OnSharedPreferenceChange
opts.inPreferredConfig = Bitmap.Config.ARGB_8888;
Bitmap in = BitmapFactory.decodeResource(mResources, id, opts);
+ // Bitmaps are stored in memory in premultiplied form. We want non-premultiplied,
+ // which is what getPixels gives us.
int pixels[] = new int[65536];
in.getPixels(pixels, 0, 256, 0, 0, 256, 256);
mRealTextures[index] = Allocation.createTyped(mRS, mTextureType,
@@ -262,7 +264,16 @@ class MagicSmokeRS extends RenderScriptScene implements OnSharedPreferenceChange
mSourceTextures[index] = Allocation.createTyped(mRS, mTextureType,
Allocation.MipmapControl.MIPMAP_NONE,
Allocation.USAGE_SCRIPT);
- mSourceTextures[index].copyFrom(pixels);
+
+ // copyFrom needs a byte[], not an int[], so we need to copy the data first
+ byte bpixels[] = new byte[65536*4];
+ for (int i = 0; i < 65536; i++) {
+ bpixels[i * 4 + 0] = (byte)(pixels[i] & 0xff);
+ bpixels[i * 4 + 1] = (byte)((pixels[i] >> 8) & 0xff);
+ bpixels[i * 4 + 2] = (byte)((pixels[i] >>16) & 0xff);
+ bpixels[i * 4 + 3] = (byte)((pixels[i] >> 24) & 0xff);
+ }
+ mSourceTextures[index].copyFrom(bpixels);
in.recycle();
}