From 2d726a7faec0123e755f4bae5771719439324612 Mon Sep 17 00:00:00 2001 From: Jorge Gorbe Date: Wed, 30 May 2012 17:49:00 +0200 Subject: [PATCH 1/1] initial commit --- Android.mk | 29 +++ AndroidManifest.xml | 21 ++ default.properties | 2 + .../slackito/testwallpaper/BuildConfig.java | 6 + gen/com/slackito/testwallpaper/R.java | 37 +++ .../testwallpaper/ScriptC_testwallpaper.java | 170 ++++++++++++ .../ScriptField_SceneFpConsts.java | 152 +++++++++++ .../ScriptField_SceneVpConsts.java | 153 +++++++++++ .../testwallpaper/ScriptField_Vertex_s.java | 159 ++++++++++++ .../slackito/testwallpaper/testwallpaper.d | 19 ++ proguard.cfg | 40 +++ project.properties | 14 + res/drawable-hdpi/icon.png | Bin 0 -> 6939 bytes res/drawable-mdpi/icon.png | Bin 0 -> 3744 bytes res/drawable-nodpi/beam.png | Bin 0 -> 7082 bytes res/drawable-nodpi/dot.png | Bin 0 -> 7045 bytes res/drawable-nodpi/wallpaper_thumb.png | Bin 0 -> 34739 bytes res/drawable-xhdpi/icon.png | Bin 0 -> 10942 bytes res/layout/main.xml | 12 + res/raw/.~lock.bgmesh.csv# | 1 + res/raw/post_fs.glsl | 5 + res/raw/post_vs.glsl | 6 + res/raw/scene_fs.glsl | 18 ++ res/raw/scene_vs.glsl | 7 + res/raw/testwallpaper.bc | Bin 0 -> 3088 bytes res/values/strings.xml | 6 + res/xml/wallpaper.xml | 23 ++ res/xml/wallpaper_settings.xml | 0 .../testwallpaper/TestWallpaperActivity.java | 16 ++ .../testwallpaper/TestWallpaperRS.java | 241 ++++++++++++++++++ .../testwallpaper/TestWallpaperService.java | 119 +++++++++ .../testwallpaper/TestWallpaperSettings.java | 25 ++ .../testwallpaper/TestWallpaperView.java | 42 +++ .../slackito/testwallpaper/testwallpaper.rs | 88 +++++++ 34 files changed, 1411 insertions(+) create mode 100644 Android.mk create mode 100644 AndroidManifest.xml create mode 100644 default.properties create mode 100644 gen/com/slackito/testwallpaper/BuildConfig.java create mode 100644 gen/com/slackito/testwallpaper/R.java create mode 100644 gen/com/slackito/testwallpaper/ScriptC_testwallpaper.java create mode 100644 gen/com/slackito/testwallpaper/ScriptField_SceneFpConsts.java create mode 100644 gen/com/slackito/testwallpaper/ScriptField_SceneVpConsts.java create mode 100644 gen/com/slackito/testwallpaper/ScriptField_Vertex_s.java create mode 100644 gen/com/slackito/testwallpaper/testwallpaper.d create mode 100644 proguard.cfg create mode 100644 project.properties create mode 100644 res/drawable-hdpi/icon.png create mode 100644 res/drawable-mdpi/icon.png create mode 100644 res/drawable-nodpi/beam.png create mode 100644 res/drawable-nodpi/dot.png create mode 100644 res/drawable-nodpi/wallpaper_thumb.png create mode 100644 res/drawable-xhdpi/icon.png create mode 100644 res/layout/main.xml create mode 100644 res/raw/.~lock.bgmesh.csv# create mode 100644 res/raw/post_fs.glsl create mode 100644 res/raw/post_vs.glsl create mode 100644 res/raw/scene_fs.glsl create mode 100644 res/raw/scene_vs.glsl create mode 100644 res/raw/testwallpaper.bc create mode 100644 res/values/strings.xml create mode 100644 res/xml/wallpaper.xml create mode 100644 res/xml/wallpaper_settings.xml create mode 100644 src/com/slackito/testwallpaper/TestWallpaperActivity.java create mode 100644 src/com/slackito/testwallpaper/TestWallpaperRS.java create mode 100644 src/com/slackito/testwallpaper/TestWallpaperService.java create mode 100644 src/com/slackito/testwallpaper/TestWallpaperSettings.java create mode 100644 src/com/slackito/testwallpaper/TestWallpaperView.java create mode 100644 src/com/slackito/testwallpaper/testwallpaper.rs diff --git a/Android.mk b/Android.mk new file mode 100644 index 0000000..f81c57c --- /dev/null +++ b/Android.mk @@ -0,0 +1,29 @@ +# +# Copyright (C) 2010 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +LOCAL_PATH := $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_MODULE_TAGS := optional + +LOCAL_SRC_FILES := $(call all-subdir-java-files) $(call all-renderscript-files-under, src) + +LOCAL_PACKAGE_NAME := PhaseBeam +LOCAL_CERTIFICATE := shared + +LOCAL_PROGUARD_FLAG_FILES := proguard.cfg + +include $(BUILD_PACKAGE) diff --git a/AndroidManifest.xml b/AndroidManifest.xml new file mode 100644 index 0000000..1bf79a1 --- /dev/null +++ b/AndroidManifest.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/default.properties b/default.properties new file mode 100644 index 0000000..ede6e6b --- /dev/null +++ b/default.properties @@ -0,0 +1,2 @@ +# Project target. +target=android-14 diff --git a/gen/com/slackito/testwallpaper/BuildConfig.java b/gen/com/slackito/testwallpaper/BuildConfig.java new file mode 100644 index 0000000..fda0e4f --- /dev/null +++ b/gen/com/slackito/testwallpaper/BuildConfig.java @@ -0,0 +1,6 @@ +/** Automatically generated file. DO NOT MODIFY */ +package com.slackito.testwallpaper; + +public final class BuildConfig { + public final static boolean DEBUG = true; +} \ No newline at end of file diff --git a/gen/com/slackito/testwallpaper/R.java b/gen/com/slackito/testwallpaper/R.java new file mode 100644 index 0000000..abc7d9a --- /dev/null +++ b/gen/com/slackito/testwallpaper/R.java @@ -0,0 +1,37 @@ +/* AUTO-GENERATED FILE. DO NOT MODIFY. + * + * This class was automatically generated by the + * aapt tool from the resource data it found. It + * should not be modified by hand. + */ + +package com.slackito.testwallpaper; + +public final class R { + public static final class attr { + } + public static final class drawable { + public static final int beam=0x7f020000; + public static final int dot=0x7f020001; + public static final int icon=0x7f020002; + public static final int wallpaper_thumb=0x7f020003; + } + public static final class layout { + public static final int main=0x7f030000; + } + public static final class raw { + public static final int post_fs=0x7f050000; + public static final int post_vs=0x7f050001; + public static final int scene_fs=0x7f050002; + public static final int scene_vs=0x7f050003; + public static final int testwallpaper=0x7f050004; + } + public static final class string { + public static final int wallpaper_author=0x7f060001; + public static final int wallpaper_description=0x7f060002; + public static final int wallpaper_label=0x7f060000; + } + public static final class xml { + public static final int wallpaper=0x7f040000; + } +} diff --git a/gen/com/slackito/testwallpaper/ScriptC_testwallpaper.java b/gen/com/slackito/testwallpaper/ScriptC_testwallpaper.java new file mode 100644 index 0000000..706b92c --- /dev/null +++ b/gen/com/slackito/testwallpaper/ScriptC_testwallpaper.java @@ -0,0 +1,170 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * This file is auto-generated. DO NOT MODIFY! + * The source Renderscript file: /home/slack/workspace/TestWallpaper/src/com/slackito/testwallpaper/testwallpaper.rs + */ +package com.slackito.testwallpaper; + +import android.renderscript.*; +import android.content.res.Resources; + +/** + * @hide + */ +public class ScriptC_testwallpaper extends ScriptC { + // Constructor + public ScriptC_testwallpaper(RenderScript rs, Resources resources, int id) { + super(rs, resources, id); + } + + private final static int mExportVarIdx_gColorBuffer = 0; + private Allocation mExportVar_gColorBuffer; + public void set_gColorBuffer(Allocation v) { + mExportVar_gColorBuffer = v; + setVar(mExportVarIdx_gColorBuffer, v); + } + + public Allocation get_gColorBuffer() { + return mExportVar_gColorBuffer; + } + + private final static int mExportVarIdx_gQuadVertices = 1; + private ScriptField_Vertex_s mExportVar_gQuadVertices; + public void bind_gQuadVertices(ScriptField_Vertex_s v) { + mExportVar_gQuadVertices = v; + if (v == null) bindAllocation(null, mExportVarIdx_gQuadVertices); + else bindAllocation(v.getAllocation(), mExportVarIdx_gQuadVertices); + } + + public ScriptField_Vertex_s get_gQuadVertices() { + return mExportVar_gQuadVertices; + } + + private final static int mExportVarIdx_gQuadMesh = 2; + private Mesh mExportVar_gQuadMesh; + public void set_gQuadMesh(Mesh v) { + mExportVar_gQuadMesh = v; + setVar(mExportVarIdx_gQuadMesh, v); + } + + public Mesh get_gQuadMesh() { + return mExportVar_gQuadMesh; + } + + private final static int mExportVarIdx_densityDPI = 3; + private float mExportVar_densityDPI; + public void set_densityDPI(float v) { + mExportVar_densityDPI = v; + setVar(mExportVarIdx_densityDPI, v); + } + + public float get_densityDPI() { + return mExportVar_densityDPI; + } + + private final static int mExportVarIdx_xOffset = 4; + private float mExportVar_xOffset; + public void set_xOffset(float v) { + mExportVar_xOffset = v; + setVar(mExportVarIdx_xOffset, v); + } + + public float get_xOffset() { + return mExportVar_xOffset; + } + + private final static int mExportVarIdx_gSceneVP = 5; + private ProgramVertex mExportVar_gSceneVP; + public void set_gSceneVP(ProgramVertex v) { + mExportVar_gSceneVP = v; + setVar(mExportVarIdx_gSceneVP, v); + } + + public ProgramVertex get_gSceneVP() { + return mExportVar_gSceneVP; + } + + private final static int mExportVarIdx_gSceneFP = 6; + private ProgramFragment mExportVar_gSceneFP; + public void set_gSceneFP(ProgramFragment v) { + mExportVar_gSceneFP = v; + setVar(mExportVarIdx_gSceneFP, v); + } + + public ProgramFragment get_gSceneFP() { + return mExportVar_gSceneFP; + } + + private final static int mExportVarIdx_sceneVpConstants = 7; + private ScriptField_SceneVpConsts mExportVar_sceneVpConstants; + public void bind_sceneVpConstants(ScriptField_SceneVpConsts v) { + mExportVar_sceneVpConstants = v; + if (v == null) bindAllocation(null, mExportVarIdx_sceneVpConstants); + else bindAllocation(v.getAllocation(), mExportVarIdx_sceneVpConstants); + } + + public ScriptField_SceneVpConsts get_sceneVpConstants() { + return mExportVar_sceneVpConstants; + } + + private final static int mExportVarIdx_sceneFpConstants = 8; + private ScriptField_SceneFpConsts mExportVar_sceneFpConstants; + public void bind_sceneFpConstants(ScriptField_SceneFpConsts v) { + mExportVar_sceneFpConstants = v; + if (v == null) bindAllocation(null, mExportVarIdx_sceneFpConstants); + else bindAllocation(v.getAllocation(), mExportVarIdx_sceneFpConstants); + } + + public ScriptField_SceneFpConsts get_sceneFpConstants() { + return mExportVar_sceneFpConstants; + } + + private final static int mExportVarIdx_gPostVP = 9; + private ProgramVertex mExportVar_gPostVP; + public void set_gPostVP(ProgramVertex v) { + mExportVar_gPostVP = v; + setVar(mExportVarIdx_gPostVP, v); + } + + public ProgramVertex get_gPostVP() { + return mExportVar_gPostVP; + } + + private final static int mExportVarIdx_gPostFP = 10; + private ProgramFragment mExportVar_gPostFP; + public void set_gPostFP(ProgramFragment v) { + mExportVar_gPostFP = v; + setVar(mExportVarIdx_gPostFP, v); + } + + public ProgramFragment get_gPostFP() { + return mExportVar_gPostFP; + } + + private final static int mExportFuncIdx_renderScene = 0; + public void invoke_renderScene() { + invoke(mExportFuncIdx_renderScene); + } + + private final static int mExportFuncIdx_renderPostFX = 1; + public void invoke_renderPostFX() { + invoke(mExportFuncIdx_renderPostFX); + } + +} + diff --git a/gen/com/slackito/testwallpaper/ScriptField_SceneFpConsts.java b/gen/com/slackito/testwallpaper/ScriptField_SceneFpConsts.java new file mode 100644 index 0000000..327b8e4 --- /dev/null +++ b/gen/com/slackito/testwallpaper/ScriptField_SceneFpConsts.java @@ -0,0 +1,152 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * This file is auto-generated. DO NOT MODIFY! + * The source Renderscript file: /home/slack/workspace/TestWallpaper/src/com/slackito/testwallpaper/testwallpaper.rs + */ +package com.slackito.testwallpaper; + +import android.renderscript.*; +import android.content.res.Resources; + +/** + * @hide + */ +public class ScriptField_SceneFpConsts extends android.renderscript.Script.FieldBase { + static public class Item { + public static final int sizeof = 8; + + float offsetX; + float fracTime; + + Item() { + } + + } + + private Item mItemArray[]; + private FieldPacker mIOBuffer; + public static Element createElement(RenderScript rs) { + Element.Builder eb = new Element.Builder(rs); + eb.add(Element.F32(rs), "offsetX"); + eb.add(Element.F32(rs), "fracTime"); + return eb.create(); + } + + public ScriptField_SceneFpConsts(RenderScript rs, int count) { + mItemArray = null; + mIOBuffer = null; + mElement = createElement(rs); + init(rs, count); + } + + public ScriptField_SceneFpConsts(RenderScript rs, int count, int usages) { + mItemArray = null; + mIOBuffer = null; + mElement = createElement(rs); + init(rs, count, usages); + } + + private void copyToArrayLocal(Item i, FieldPacker fp) { + fp.addF32(i.offsetX); + fp.addF32(i.fracTime); + } + + private void copyToArray(Item i, int index) { + if (mIOBuffer == null) mIOBuffer = new FieldPacker(Item.sizeof * getType().getX()/* count */); + mIOBuffer.reset(index * Item.sizeof); + copyToArrayLocal(i, mIOBuffer); + } + + public synchronized void set(Item i, int index, boolean copyNow) { + if (mItemArray == null) mItemArray = new Item[getType().getX() /* count */]; + mItemArray[index] = i; + if (copyNow) { + copyToArray(i, index); + FieldPacker fp = new FieldPacker(Item.sizeof); + copyToArrayLocal(i, fp); + mAllocation.setFromFieldPacker(index, fp); + } + + } + + public synchronized Item get(int index) { + if (mItemArray == null) return null; + return mItemArray[index]; + } + + public synchronized void set_offsetX(int index, float v, boolean copyNow) { + if (mIOBuffer == null) mIOBuffer = new FieldPacker(Item.sizeof * getType().getX()/* count */); + if (mItemArray == null) mItemArray = new Item[getType().getX() /* count */]; + if (mItemArray[index] == null) mItemArray[index] = new Item(); + mItemArray[index].offsetX = v; + if (copyNow) { + mIOBuffer.reset(index * Item.sizeof); + mIOBuffer.addF32(v); + FieldPacker fp = new FieldPacker(4); + fp.addF32(v); + mAllocation.setFromFieldPacker(index, 0, fp); + } + + } + + public synchronized void set_fracTime(int index, float v, boolean copyNow) { + if (mIOBuffer == null) mIOBuffer = new FieldPacker(Item.sizeof * getType().getX()/* count */); + if (mItemArray == null) mItemArray = new Item[getType().getX() /* count */]; + if (mItemArray[index] == null) mItemArray[index] = new Item(); + mItemArray[index].fracTime = v; + if (copyNow) { + mIOBuffer.reset(index * Item.sizeof + 4); + mIOBuffer.addF32(v); + FieldPacker fp = new FieldPacker(4); + fp.addF32(v); + mAllocation.setFromFieldPacker(index, 1, fp); + } + + } + + public synchronized float get_offsetX(int index) { + if (mItemArray == null) return 0; + return mItemArray[index].offsetX; + } + + public synchronized float get_fracTime(int index) { + if (mItemArray == null) return 0; + return mItemArray[index].fracTime; + } + + public synchronized void copyAll() { + for (int ct = 0; ct < mItemArray.length; ct++) copyToArray(mItemArray[ct], ct); + mAllocation.setFromFieldPacker(0, mIOBuffer); + } + + public synchronized void resize(int newSize) { + if (mItemArray != null) { + int oldSize = mItemArray.length; + int copySize = Math.min(oldSize, newSize); + if (newSize == oldSize) return; + Item ni[] = new Item[newSize]; + System.arraycopy(mItemArray, 0, ni, 0, copySize); + mItemArray = ni; + } + + mAllocation.resize(newSize); + if (mIOBuffer != null) mIOBuffer = new FieldPacker(Item.sizeof * getType().getX()/* count */); + } + +} + diff --git a/gen/com/slackito/testwallpaper/ScriptField_SceneVpConsts.java b/gen/com/slackito/testwallpaper/ScriptField_SceneVpConsts.java new file mode 100644 index 0000000..352276c --- /dev/null +++ b/gen/com/slackito/testwallpaper/ScriptField_SceneVpConsts.java @@ -0,0 +1,153 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * This file is auto-generated. DO NOT MODIFY! + * The source Renderscript file: /home/slack/workspace/TestWallpaper/src/com/slackito/testwallpaper/testwallpaper.rs + */ +package com.slackito.testwallpaper; + +import android.renderscript.*; +import android.content.res.Resources; + +/** + * @hide + */ +public class ScriptField_SceneVpConsts extends android.renderscript.Script.FieldBase { + static public class Item { + public static final int sizeof = 68; + + Matrix4f MVP; + float scaleSize; + + Item() { + MVP = new Matrix4f(); + } + + } + + private Item mItemArray[]; + private FieldPacker mIOBuffer; + public static Element createElement(RenderScript rs) { + Element.Builder eb = new Element.Builder(rs); + eb.add(Element.MATRIX_4X4(rs), "MVP"); + eb.add(Element.F32(rs), "scaleSize"); + return eb.create(); + } + + public ScriptField_SceneVpConsts(RenderScript rs, int count) { + mItemArray = null; + mIOBuffer = null; + mElement = createElement(rs); + init(rs, count); + } + + public ScriptField_SceneVpConsts(RenderScript rs, int count, int usages) { + mItemArray = null; + mIOBuffer = null; + mElement = createElement(rs); + init(rs, count, usages); + } + + private void copyToArrayLocal(Item i, FieldPacker fp) { + fp.addMatrix(i.MVP); + fp.addF32(i.scaleSize); + } + + private void copyToArray(Item i, int index) { + if (mIOBuffer == null) mIOBuffer = new FieldPacker(Item.sizeof * getType().getX()/* count */); + mIOBuffer.reset(index * Item.sizeof); + copyToArrayLocal(i, mIOBuffer); + } + + public synchronized void set(Item i, int index, boolean copyNow) { + if (mItemArray == null) mItemArray = new Item[getType().getX() /* count */]; + mItemArray[index] = i; + if (copyNow) { + copyToArray(i, index); + FieldPacker fp = new FieldPacker(Item.sizeof); + copyToArrayLocal(i, fp); + mAllocation.setFromFieldPacker(index, fp); + } + + } + + public synchronized Item get(int index) { + if (mItemArray == null) return null; + return mItemArray[index]; + } + + public synchronized void set_MVP(int index, Matrix4f v, boolean copyNow) { + if (mIOBuffer == null) mIOBuffer = new FieldPacker(Item.sizeof * getType().getX()/* count */); + if (mItemArray == null) mItemArray = new Item[getType().getX() /* count */]; + if (mItemArray[index] == null) mItemArray[index] = new Item(); + mItemArray[index].MVP = v; + if (copyNow) { + mIOBuffer.reset(index * Item.sizeof); + mIOBuffer.addMatrix(v); + FieldPacker fp = new FieldPacker(64); + fp.addMatrix(v); + mAllocation.setFromFieldPacker(index, 0, fp); + } + + } + + public synchronized void set_scaleSize(int index, float v, boolean copyNow) { + if (mIOBuffer == null) mIOBuffer = new FieldPacker(Item.sizeof * getType().getX()/* count */); + if (mItemArray == null) mItemArray = new Item[getType().getX() /* count */]; + if (mItemArray[index] == null) mItemArray[index] = new Item(); + mItemArray[index].scaleSize = v; + if (copyNow) { + mIOBuffer.reset(index * Item.sizeof + 64); + mIOBuffer.addF32(v); + FieldPacker fp = new FieldPacker(4); + fp.addF32(v); + mAllocation.setFromFieldPacker(index, 1, fp); + } + + } + + public synchronized Matrix4f get_MVP(int index) { + if (mItemArray == null) return null; + return mItemArray[index].MVP; + } + + public synchronized float get_scaleSize(int index) { + if (mItemArray == null) return 0; + return mItemArray[index].scaleSize; + } + + public synchronized void copyAll() { + for (int ct = 0; ct < mItemArray.length; ct++) copyToArray(mItemArray[ct], ct); + mAllocation.setFromFieldPacker(0, mIOBuffer); + } + + public synchronized void resize(int newSize) { + if (mItemArray != null) { + int oldSize = mItemArray.length; + int copySize = Math.min(oldSize, newSize); + if (newSize == oldSize) return; + Item ni[] = new Item[newSize]; + System.arraycopy(mItemArray, 0, ni, 0, copySize); + mItemArray = ni; + } + + mAllocation.resize(newSize); + if (mIOBuffer != null) mIOBuffer = new FieldPacker(Item.sizeof * getType().getX()/* count */); + } + +} + diff --git a/gen/com/slackito/testwallpaper/ScriptField_Vertex_s.java b/gen/com/slackito/testwallpaper/ScriptField_Vertex_s.java new file mode 100644 index 0000000..98796fa --- /dev/null +++ b/gen/com/slackito/testwallpaper/ScriptField_Vertex_s.java @@ -0,0 +1,159 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * This file is auto-generated. DO NOT MODIFY! + * The source Renderscript file: /home/slack/workspace/TestWallpaper/src/com/slackito/testwallpaper/testwallpaper.rs + */ +package com.slackito.testwallpaper; + +import android.renderscript.*; +import android.content.res.Resources; + +/** + * @hide + */ +public class ScriptField_Vertex_s extends android.renderscript.Script.FieldBase { + static public class Item { + public static final int sizeof = 32; + + Float3 position; + Float2 texCoord; + + Item() { + position = new Float3(); + texCoord = new Float2(); + } + + } + + private Item mItemArray[]; + private FieldPacker mIOBuffer; + public static Element createElement(RenderScript rs) { + Element.Builder eb = new Element.Builder(rs); + eb.add(Element.F32_3(rs), "position"); + eb.add(Element.U32(rs), "#padding_1"); + eb.add(Element.F32_2(rs), "texCoord"); + eb.add(Element.U32(rs), "#padding_2"); + eb.add(Element.U32(rs), "#padding_3"); + return eb.create(); + } + + public ScriptField_Vertex_s(RenderScript rs, int count) { + mItemArray = null; + mIOBuffer = null; + mElement = createElement(rs); + init(rs, count); + } + + public ScriptField_Vertex_s(RenderScript rs, int count, int usages) { + mItemArray = null; + mIOBuffer = null; + mElement = createElement(rs); + init(rs, count, usages); + } + + private void copyToArrayLocal(Item i, FieldPacker fp) { + fp.addF32(i.position); + fp.skip(4); + fp.addF32(i.texCoord); + fp.skip(8); + } + + private void copyToArray(Item i, int index) { + if (mIOBuffer == null) mIOBuffer = new FieldPacker(Item.sizeof * getType().getX()/* count */); + mIOBuffer.reset(index * Item.sizeof); + copyToArrayLocal(i, mIOBuffer); + } + + public synchronized void set(Item i, int index, boolean copyNow) { + if (mItemArray == null) mItemArray = new Item[getType().getX() /* count */]; + mItemArray[index] = i; + if (copyNow) { + copyToArray(i, index); + FieldPacker fp = new FieldPacker(Item.sizeof); + copyToArrayLocal(i, fp); + mAllocation.setFromFieldPacker(index, fp); + } + + } + + public synchronized Item get(int index) { + if (mItemArray == null) return null; + return mItemArray[index]; + } + + public synchronized void set_position(int index, Float3 v, boolean copyNow) { + if (mIOBuffer == null) mIOBuffer = new FieldPacker(Item.sizeof * getType().getX()/* count */); + if (mItemArray == null) mItemArray = new Item[getType().getX() /* count */]; + if (mItemArray[index] == null) mItemArray[index] = new Item(); + mItemArray[index].position = v; + if (copyNow) { + mIOBuffer.reset(index * Item.sizeof); + mIOBuffer.addF32(v); + FieldPacker fp = new FieldPacker(12); + fp.addF32(v); + mAllocation.setFromFieldPacker(index, 0, fp); + } + + } + + public synchronized void set_texCoord(int index, Float2 v, boolean copyNow) { + if (mIOBuffer == null) mIOBuffer = new FieldPacker(Item.sizeof * getType().getX()/* count */); + if (mItemArray == null) mItemArray = new Item[getType().getX() /* count */]; + if (mItemArray[index] == null) mItemArray[index] = new Item(); + mItemArray[index].texCoord = v; + if (copyNow) { + mIOBuffer.reset(index * Item.sizeof + 16); + mIOBuffer.addF32(v); + FieldPacker fp = new FieldPacker(8); + fp.addF32(v); + mAllocation.setFromFieldPacker(index, 2, fp); + } + + } + + public synchronized Float3 get_position(int index) { + if (mItemArray == null) return null; + return mItemArray[index].position; + } + + public synchronized Float2 get_texCoord(int index) { + if (mItemArray == null) return null; + return mItemArray[index].texCoord; + } + + public synchronized void copyAll() { + for (int ct = 0; ct < mItemArray.length; ct++) copyToArray(mItemArray[ct], ct); + mAllocation.setFromFieldPacker(0, mIOBuffer); + } + + public synchronized void resize(int newSize) { + if (mItemArray != null) { + int oldSize = mItemArray.length; + int copySize = Math.min(oldSize, newSize); + if (newSize == oldSize) return; + Item ni[] = new Item[newSize]; + System.arraycopy(mItemArray, 0, ni, 0, copySize); + mItemArray = ni; + } + + mAllocation.resize(newSize); + if (mIOBuffer != null) mIOBuffer = new FieldPacker(Item.sizeof * getType().getX()/* count */); + } + +} + diff --git a/gen/com/slackito/testwallpaper/testwallpaper.d b/gen/com/slackito/testwallpaper/testwallpaper.d new file mode 100644 index 0000000..3ccb4fa --- /dev/null +++ b/gen/com/slackito/testwallpaper/testwallpaper.d @@ -0,0 +1,19 @@ +/home/slack/workspace/TestWallpaper/res/raw/testwallpaper.bc \ + /home/slack/workspace/TestWallpaper/gen/com/slackito/testwallpaper/ScriptC_testwallpaper.java \ + /home/slack/workspace/TestWallpaper/gen/com/slackito/testwallpaper/ScriptField_SceneVpConsts.java \ + /home/slack/workspace/TestWallpaper/gen/com/slackito/testwallpaper/ScriptField_Vertex_s.java \ + /home/slack/workspace/TestWallpaper/gen/com/slackito/testwallpaper/ScriptField_SceneFpConsts.java: \ + /home/slack/workspace/TestWallpaper/src/com/slackito/testwallpaper/testwallpaper.rs \ + /home/slack/android/android-sdk-linux/platform-tools/renderscript/include/rs_core.rsh \ + /home/slack/android/android-sdk-linux/platform-tools/renderscript/include/rs_types.rsh \ + /home/slack/android/android-sdk-linux/platform-tools/renderscript/clang-include/stdbool.h \ + /home/slack/android/android-sdk-linux/platform-tools/renderscript/include/rs_allocation.rsh \ + /home/slack/android/android-sdk-linux/platform-tools/renderscript/include/rs_atomic.rsh \ + /home/slack/android/android-sdk-linux/platform-tools/renderscript/include/rs_cl.rsh \ + /home/slack/android/android-sdk-linux/platform-tools/renderscript/include/rs_debug.rsh \ + /home/slack/android/android-sdk-linux/platform-tools/renderscript/include/rs_math.rsh \ + /home/slack/android/android-sdk-linux/platform-tools/renderscript/include/rs_matrix.rsh \ + /home/slack/android/android-sdk-linux/platform-tools/renderscript/include/rs_object.rsh \ + /home/slack/android/android-sdk-linux/platform-tools/renderscript/include/rs_quaternion.rsh \ + /home/slack/android/android-sdk-linux/platform-tools/renderscript/include/rs_time.rsh \ + /home/slack/android/android-sdk-linux/platform-tools/renderscript/include/rs_graphics.rsh diff --git a/proguard.cfg b/proguard.cfg new file mode 100644 index 0000000..b1cdf17 --- /dev/null +++ b/proguard.cfg @@ -0,0 +1,40 @@ +-optimizationpasses 5 +-dontusemixedcaseclassnames +-dontskipnonpubliclibraryclasses +-dontpreverify +-verbose +-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* + +-keep public class * extends android.app.Activity +-keep public class * extends android.app.Application +-keep public class * extends android.app.Service +-keep public class * extends android.content.BroadcastReceiver +-keep public class * extends android.content.ContentProvider +-keep public class * extends android.app.backup.BackupAgentHelper +-keep public class * extends android.preference.Preference +-keep public class com.android.vending.licensing.ILicensingService + +-keepclasseswithmembernames class * { + native ; +} + +-keepclasseswithmembers class * { + public (android.content.Context, android.util.AttributeSet); +} + +-keepclasseswithmembers class * { + public (android.content.Context, android.util.AttributeSet, int); +} + +-keepclassmembers class * extends android.app.Activity { + public void *(android.view.View); +} + +-keepclassmembers enum * { + public static **[] values(); + public static ** valueOf(java.lang.String); +} + +-keep class * implements android.os.Parcelable { + public static final android.os.Parcelable$Creator *; +} diff --git a/project.properties b/project.properties new file mode 100644 index 0000000..8937e94 --- /dev/null +++ b/project.properties @@ -0,0 +1,14 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system edit +# "ant.properties", and override values to adapt the script to your +# project structure. +# +# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): +#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt + +# Project target. +target=android-14 diff --git a/res/drawable-hdpi/icon.png b/res/drawable-hdpi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2eab6f218c72dc120510cff8db73868dbbfab961 GIT binary patch literal 6939 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 literal 0 HcmV?d00001 diff --git a/res/drawable-mdpi/icon.png b/res/drawable-mdpi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..63aec6fca4195f44b61f32b6a220b036685d8c94 GIT binary patch literal 3744 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 KMNUMnLSTY{Rr{O( literal 0 HcmV?d00001 diff --git a/res/drawable-nodpi/beam.png b/res/drawable-nodpi/beam.png new file mode 100644 index 0000000000000000000000000000000000000000..98196ebd8b15a9bc148ef7ad484eb5eb50b1e0f6 GIT binary patch literal 7082 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 I$XSN{AG4|#6951J literal 0 HcmV?d00001 diff --git a/res/drawable-nodpi/dot.png b/res/drawable-nodpi/dot.png new file mode 100644 index 0000000000000000000000000000000000000000..2eec7d3ca4df71b75138131a5d938298f9b1fdd1 GIT binary patch literal 7045 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 literal 0 HcmV?d00001 diff --git a/res/drawable-nodpi/wallpaper_thumb.png b/res/drawable-nodpi/wallpaper_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..26055f1dc6d0a068fa80407d429ad67b730219ea GIT binary patch literal 34739 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 M07*qoM6N<$f*jgaKL7v# literal 0 HcmV?d00001 diff --git a/res/drawable-xhdpi/icon.png b/res/drawable-xhdpi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8ea9c4899a31612716a087429ce707ad22d6fcf9 GIT binary patch literal 10942 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 + + + diff --git a/res/raw/.~lock.bgmesh.csv# b/res/raw/.~lock.bgmesh.csv# new file mode 100644 index 0000000..267767a --- /dev/null +++ b/res/raw/.~lock.bgmesh.csv# @@ -0,0 +1 @@ +,slack,ommadawn,13.05.2012 13:05,file:///home/slack/.libreoffice/3; \ No newline at end of file diff --git a/res/raw/post_fs.glsl b/res/raw/post_fs.glsl new file mode 100644 index 0000000..3180ed6 --- /dev/null +++ b/res/raw/post_fs.glsl @@ -0,0 +1,5 @@ +varying vec2 texCoord; + +void main() { + gl_FragColor = texture2D(UNI_Tex0, texCoord); +} diff --git a/res/raw/post_vs.glsl b/res/raw/post_vs.glsl new file mode 100644 index 0000000..a28d632 --- /dev/null +++ b/res/raw/post_vs.glsl @@ -0,0 +1,6 @@ +varying vec2 texCoord; + +void main() { + gl_Position = vec4(ATTRIB_position.x, ATTRIB_position.y, ATTRIB_position.z, 1.0); + texCoord = ATTRIB_texCoord; +} \ No newline at end of file diff --git a/res/raw/scene_fs.glsl b/res/raw/scene_fs.glsl new file mode 100644 index 0000000..4c7671f --- /dev/null +++ b/res/raw/scene_fs.glsl @@ -0,0 +1,18 @@ +varying highp vec4 position; + + +void main() { + //gl_FragColor = vec4(r, g, b, 1.0); + highp vec2 p = vec2(position.x, position.y); + p.x = p.x - UNI_offsetX + 0.5; + + float u = length(p); + float v = atan(p.y, p.x); + float t = (6.283*UNI_fracTime) / 0.5 + 1.0 / u; + + float intensity = abs(sin(t * 10.0 + v)+sin(v*8.0)) * .25 * u * 0.25; + vec3 col = vec3(-sin(v*4.0+v*2.0+6.283*UNI_fracTime), sin(u*8.0+v-6.283*UNI_fracTime), cos(u+v*3.0+6.283*UNI_fracTime))*16.0; + + gl_FragColor = vec4(col * intensity * (u * 4.0), 1.0); + +} \ No newline at end of file diff --git a/res/raw/scene_vs.glsl b/res/raw/scene_vs.glsl new file mode 100644 index 0000000..83c1f75 --- /dev/null +++ b/res/raw/scene_vs.glsl @@ -0,0 +1,7 @@ +varying highp vec4 position; + +void main() { + gl_Position = vec4(ATTRIB_position, 1.0); + //position = UNI_MVP * vec4(ATTRIB_position.x, ATTRIB_position.y, ATTRIB_position.z, 1.0) * UNI_scaleSize; + position = gl_Position; +} \ No newline at end of file diff --git a/res/raw/testwallpaper.bc b/res/raw/testwallpaper.bc new file mode 100644 index 0000000000000000000000000000000000000000..6925d816fa9f7cf767933560b604b1817efdf60e GIT binary patch literal 3088 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 O%|D?ht7KemaP7aqj}t@y literal 0 HcmV?d00001 diff --git a/res/values/strings.xml b/res/values/strings.xml new file mode 100644 index 0000000..8fa4293 --- /dev/null +++ b/res/values/strings.xml @@ -0,0 +1,6 @@ + + + Test Wallpaper + Jorge Gorbe + Test wallpaper + diff --git a/res/xml/wallpaper.xml b/res/xml/wallpaper.xml new file mode 100644 index 0000000..71a9574 --- /dev/null +++ b/res/xml/wallpaper.xml @@ -0,0 +1,23 @@ + + + + diff --git a/res/xml/wallpaper_settings.xml b/res/xml/wallpaper_settings.xml new file mode 100644 index 0000000..e69de29 diff --git a/src/com/slackito/testwallpaper/TestWallpaperActivity.java b/src/com/slackito/testwallpaper/TestWallpaperActivity.java new file mode 100644 index 0000000..903ad97 --- /dev/null +++ b/src/com/slackito/testwallpaper/TestWallpaperActivity.java @@ -0,0 +1,16 @@ +package com.slackito.testwallpaper; + +import android.app.Activity; +import android.os.Bundle; + +public class TestWallpaperActivity extends Activity { + + private TestWallpaperView mView; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mView = new TestWallpaperView(this); + setContentView(mView); + } +} \ No newline at end of file diff --git a/src/com/slackito/testwallpaper/TestWallpaperRS.java b/src/com/slackito/testwallpaper/TestWallpaperRS.java new file mode 100644 index 0000000..86d9e42 --- /dev/null +++ b/src/com/slackito/testwallpaper/TestWallpaperRS.java @@ -0,0 +1,241 @@ +package com.slackito.testwallpaper; + +import static android.renderscript.Sampler.Value.NEAREST; +import static android.renderscript.Sampler.Value.WRAP; + +import android.content.res.Resources; +import android.renderscript.Allocation; +import android.renderscript.Element; +import android.renderscript.Float2; +import android.renderscript.Matrix4f; +import android.renderscript.Mesh; +import android.renderscript.Program; +import android.renderscript.Program.TextureType; +import android.renderscript.ProgramFragment; +import android.renderscript.ProgramFragmentFixedFunction; +import android.renderscript.ProgramRaster; +import android.renderscript.ProgramStore; +import android.renderscript.ProgramVertex; +import android.renderscript.ProgramVertexFixedFunction; +import android.renderscript.RenderScriptGL; +import android.renderscript.Sampler; +import android.renderscript.Type; +import android.renderscript.ProgramStore.BlendDstFunc; +import android.renderscript.ProgramStore.BlendSrcFunc; +import android.renderscript.Mesh.Primitive; +import android.graphics.Color; +import android.renderscript.Float3; +import android.renderscript.Float4; +import java.io.InputStreamReader; +import java.io.InputStream; +import java.io.BufferedReader; +import java.io.IOException; +import java.util.ArrayList; +import android.util.Log; + +public class TestWallpaperRS { + public static String LOG_TAG = "TestWallpaper"; + private Resources mRes; + private RenderScriptGL mRS; + private ScriptC_testwallpaper mScript; + int mHeight; + int mWidth; + + private ScriptField_SceneVpConsts mSceneVpConsts; + private ScriptField_SceneFpConsts mSceneFpConsts; + + private ScriptField_Vertex_s mQuadVertices; + + private Allocation mColorBuffer; + + private int mDensityDPI; + + boolean mInited = false; + + public void init(int dpi, RenderScriptGL rs, Resources res, int width, int height) { + if (!mInited) { + mDensityDPI = dpi; + + mRS = rs; + mRes = res; + + mWidth = width; + mHeight = height; + + + /* + mDotParticles = new ScriptField_Particle(mRS, DOT_COUNT); + Mesh.AllocationBuilder smb2 = new Mesh.AllocationBuilder(mRS); + smb2.addVertexAllocation(mDotParticles.getAllocation()); + smb2.addIndexSetType(Mesh.Primitive.POINT); + mDotMesh = smb2.create(); + */ + + + mScript = new ScriptC_testwallpaper(mRS, mRes, R.raw.testwallpaper); + //mScript.set_dotMesh(mDotMesh); + //mScript.bind_dotParticles(mDotParticles); + + mSceneVpConsts = new ScriptField_SceneVpConsts(mRS, 1); + mScript.bind_sceneVpConstants(mSceneVpConsts); + + mSceneFpConsts = new ScriptField_SceneFpConsts(mRS, 1); + mScript.bind_sceneFpConstants(mSceneFpConsts); + + createProgramVertex(); + createProgramRaster(); + createProgramFragmentStore(); + createProgramFragment(); + createBackgroundMesh(); + loadTextures(); + + Type.Builder colorBuilder = new Type.Builder(mRS, Element.RGBA_8888(mRS)); + colorBuilder.setX(256).setY(256); + mColorBuffer = Allocation.createTyped(mRS, colorBuilder.create(), Allocation.USAGE_GRAPHICS_TEXTURE | Allocation.USAGE_GRAPHICS_RENDER_TARGET); + mScript.set_gColorBuffer(mColorBuffer); + + mScript.set_densityDPI(mDensityDPI); + + mRS.bindRootScript(mScript); + + //mScript.invoke_init(); + mInited = true; + } + } + + private Matrix4f getProjectionNormalized(int w, int h) { + // range -1,1 in the narrow axis at z = 0. + Matrix4f m1 = new Matrix4f(); + Matrix4f m2 = new Matrix4f(); + + if (w > h) { + float aspect = ((float) w) / h; + m1.loadFrustum(-aspect, aspect, -1, 1, 1, 100); + } else { + float aspect = ((float) h) / w; + m1.loadFrustum(-1, 1, -aspect, aspect, 1, 100); + } + + + + m2.loadRotate(180, 0, 1, 0); + m1.loadMultiply(m1, m2); + + m2.loadScale(-1, 1, 1); + m1.loadMultiply(m1, m2); + + m2.loadTranslate(0, 0, 1); + m1.loadMultiply(m1, m2); + + return m1; + } + + private void updateProjectionMatrices() { + Matrix4f projNorm = getProjectionNormalized(mWidth, mHeight); + ScriptField_SceneVpConsts.Item i = new ScriptField_SceneVpConsts.Item(); + i.MVP = projNorm; + i.scaleSize = mDensityDPI / 240.0f; + mSceneVpConsts.set(i, 0, true); + } + + private void createBackgroundMesh() { + mQuadVertices = new ScriptField_Vertex_s(mRS, 4); + mQuadVertices.set_position(0, new Float3(2,-2,0), false); + mQuadVertices.set_texCoord(0, new Float2(1, 0), false); + mQuadVertices.set_position(1, new Float3(2,2,0), false); + mQuadVertices.set_texCoord(1, new Float2(1, 1), false); + mQuadVertices.set_position(2, new Float3(-2,-2,0), false); + mQuadVertices.set_texCoord(2, new Float2(0, 0), false); + mQuadVertices.set_position(3, new Float3(-2,2,0), false); + mQuadVertices.set_texCoord(3, new Float2(0, 1), false); + mQuadVertices.copyAll(); + + + Mesh.AllocationBuilder backgroundBuilder = new Mesh.AllocationBuilder(mRS); + backgroundBuilder.addIndexSetType(Primitive.TRIANGLE_STRIP); + backgroundBuilder.addVertexAllocation(mQuadVertices.getAllocation()); + mScript.set_gQuadMesh(backgroundBuilder.create()); + mScript.bind_gQuadVertices(mQuadVertices); + } + + private Allocation loadTexture(int id) { + final Allocation allocation = Allocation.createFromBitmapResource(mRS, mRes, id); + return allocation; + } + + private void loadTextures() { + /* + mDotAllocation = loadTexture(R.drawable.dot); + mBeamAllocation = loadTexture(R.drawable.beam); + mScript.set_textureDot(mDotAllocation); + mScript.set_textureBeam(mBeamAllocation); + */ + } + + private void createProgramVertex() { + updateProjectionMatrices(); + + ProgramVertex.Builder backgroundBuilder = new ProgramVertex.Builder(mRS); + backgroundBuilder.setShader(mRes, R.raw.scene_vs); + backgroundBuilder.addInput(ScriptField_Vertex_s.createElement(mRS)); + backgroundBuilder.addConstant(mSceneVpConsts.getType()); + ProgramVertex programVertexBackground = backgroundBuilder.create(); + programVertexBackground.bindConstants(mSceneVpConsts.getAllocation(), 0); + mScript.set_gSceneVP(programVertexBackground); + + ProgramVertex.Builder textureBuilder = new ProgramVertex.Builder(mRS); + textureBuilder.setShader(mRes, R.raw.post_vs); + textureBuilder.addInput(ScriptField_Vertex_s.createElement(mRS)); + textureBuilder.addConstant(mSceneVpConsts.getType()); + ProgramVertex programVertexTexture = textureBuilder.create(); + programVertexTexture.bindConstants(mSceneVpConsts.getAllocation(), 0); + mScript.set_gPostVP(programVertexTexture); + } + + private void createProgramFragment() { + ProgramFragment.Builder backgroundBuilder = new ProgramFragment.Builder(mRS); + backgroundBuilder.setShader(mRes, R.raw.scene_fs); + backgroundBuilder.addConstant(mSceneFpConsts.getType()); + ProgramFragment programFragmentBackground = backgroundBuilder.create(); + programFragmentBackground.bindConstants(mSceneFpConsts.getAllocation(), 0); + mScript.set_gSceneFP(programFragmentBackground); + + + ProgramFragment.Builder textureBuilder = new ProgramFragment.Builder(mRS); + textureBuilder.setShader(mRes, R.raw.post_fs); + textureBuilder.addTexture(TextureType.TEXTURE_2D); + ProgramFragment programFragmentTexture = textureBuilder.create(); + mScript.set_gPostFP(programFragmentTexture); + } + + private void createProgramRaster() { + ProgramRaster.Builder builder = new ProgramRaster.Builder(mRS); + builder.setPointSpriteEnabled(true); + ProgramRaster pr = builder.create(); + mRS.bindProgramRaster(pr); + } + + private void createProgramFragmentStore() { + ProgramStore.Builder builder = new ProgramStore.Builder(mRS); + builder.setBlendFunc(BlendSrcFunc.SRC_ALPHA, BlendDstFunc.ONE_MINUS_SRC_ALPHA); + mRS.bindProgramStore(builder.create()); + } + + public void start() { + mRS.bindRootScript(mScript); + } + + public void stop() { + mRS.bindRootScript(null); + } + + public void setOffset(float xOffset, float yOffset, int xPixels, int yPixels) { + //Log.d("TestWallpaper", "Set Xoffset = "+Float.toString(xOffset)); + mScript.set_xOffset(xOffset); + } + + public void resize(int w, int h) { + + } + +} diff --git a/src/com/slackito/testwallpaper/TestWallpaperService.java b/src/com/slackito/testwallpaper/TestWallpaperService.java new file mode 100644 index 0000000..c0da873 --- /dev/null +++ b/src/com/slackito/testwallpaper/TestWallpaperService.java @@ -0,0 +1,119 @@ +package com.slackito.testwallpaper; + +import android.app.Service; +import android.content.SharedPreferences; +import android.graphics.PixelFormat; +import android.os.Bundle; +import android.renderscript.RenderScript; +import android.renderscript.RenderScriptGL; +import android.service.wallpaper.WallpaperService; +import android.util.DisplayMetrics; +import android.view.SurfaceHolder; +import android.view.WindowManager; + +public class TestWallpaperService extends WallpaperService { + + public static final String SHARED_PREFS_NAME = "TestWallpaperSettings"; + + @Override + public Engine onCreateEngine() { + return new RenderScriptEngine(); + } + + private class RenderScriptEngine extends Engine { + private RenderScriptGL mRenderScript = null; + private TestWallpaperRS mWallpaperRS = null; + private int mDensityDPI; + + @Override + public void onCreate(SurfaceHolder surfaceHolder) { + super.onCreate(surfaceHolder); + setTouchEventsEnabled(true); + surfaceHolder.setSizeFromLayout(); + surfaceHolder.setFormat(PixelFormat.RGB_332); + + DisplayMetrics metrics = new DisplayMetrics(); + ((WindowManager) getApplication().getSystemService(Service.WINDOW_SERVICE)) + .getDefaultDisplay().getMetrics(metrics); + mDensityDPI = metrics.densityDpi; + } + + @Override + public void onDestroy() { + super.onDestroy(); + destroyRenderer(); + } + + public void destroyRenderer() { + if (mWallpaperRS != null) { + mWallpaperRS.stop(); + mWallpaperRS = null; + } + + if (mRenderScript != null) { + mRenderScript.setSurface(null, 0, 0); + mRenderScript.destroy(); + mRenderScript = null; + } + } + + @Override + public void onSurfaceCreated(SurfaceHolder surfaceHolder) { + super.onSurfaceCreated(surfaceHolder); + + RenderScriptGL.SurfaceConfig sc = new RenderScriptGL.SurfaceConfig(); + mRenderScript = new RenderScriptGL(TestWallpaperService.this, sc); + mRenderScript.setPriority(RenderScript.Priority.NORMAL); + } + + @Override + public void onSurfaceDestroyed(SurfaceHolder surfaceHolder) { + super.onSurfaceDestroyed(surfaceHolder); + destroyRenderer(); + } + + @Override + public void onSurfaceChanged(SurfaceHolder surfaceHolder, int format, int width, + int height) { + super.onSurfaceChanged(surfaceHolder, format, width, height); + + if (mRenderScript != null) { + mRenderScript.setSurface(surfaceHolder, width, height); + } + + if (mWallpaperRS == null) { + mWallpaperRS = new TestWallpaperRS(); + mWallpaperRS.init(mDensityDPI, mRenderScript, getResources(), width, height); + mWallpaperRS.start(); + } + + mWallpaperRS.resize(width, height); + } + + @Override + public Bundle onCommand(String action, int x, int y, int z, Bundle extras, + boolean resultRequested) { + return null; + } + + @Override + public void onVisibilityChanged(boolean visible) { + super.onVisibilityChanged(visible); + if (mWallpaperRS != null) { + if (visible) { + mWallpaperRS.start(); + } else { + mWallpaperRS.stop(); + } + } + } + + @Override + public void onOffsetsChanged(float xOffset, float yOffset, float xOffsetStep, + float yOffsetStep, int xPixelOffset, int yPixelOffset) { + mWallpaperRS.setOffset(xOffset, yOffset, xPixelOffset, yPixelOffset); + } + + } // engine + +} \ No newline at end of file diff --git a/src/com/slackito/testwallpaper/TestWallpaperSettings.java b/src/com/slackito/testwallpaper/TestWallpaperSettings.java new file mode 100644 index 0000000..831099b --- /dev/null +++ b/src/com/slackito/testwallpaper/TestWallpaperSettings.java @@ -0,0 +1,25 @@ +package com.slackito.testwallpaper; + +import android.content.SharedPreferences; +import android.os.Bundle; +import android.preference.PreferenceActivity; + +public class TestWallpaperSettings extends PreferenceActivity + implements SharedPreferences.OnSharedPreferenceChangeListener +{ + + @Override + protected void onCreate(Bundle icicle) { + super.onCreate(icicle); + getPreferenceManager().setSharedPreferencesName(TestWallpaperService.SHARED_PREFS_NAME); + addPreferencesFromResource(R.xml.flash_settings); + getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); + } + + + public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, + String key) { + + } + +} diff --git a/src/com/slackito/testwallpaper/TestWallpaperView.java b/src/com/slackito/testwallpaper/TestWallpaperView.java new file mode 100644 index 0000000..431230d --- /dev/null +++ b/src/com/slackito/testwallpaper/TestWallpaperView.java @@ -0,0 +1,42 @@ +package com.slackito.testwallpaper; + +import android.content.Context; +import android.renderscript.RSSurfaceView; +import android.renderscript.RenderScriptGL; +import android.view.SurfaceHolder; + +public class TestWallpaperView extends RSSurfaceView { + + private RenderScriptGL mRS; + private TestWallpaperRS mRender; + + public TestWallpaperView(Context context) { + super(context); + setFocusable(true); + setFocusableInTouchMode(true); + } + + public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { + super.surfaceChanged(holder, format, w, h); + + if (mRS == null) { + RenderScriptGL.SurfaceConfig sc = new RenderScriptGL.SurfaceConfig(); + mRS = createRenderScriptGL(sc); + mRS.setSurface(holder, w, h); + + mRender = new TestWallpaperRS(); + mRender.init(240, mRS, getResources(), w, h); + } + + } + + @Override + protected void onDetachedFromWindow() { + if (mRS != null) { + mRS.setSurface(null, 0, 0); + mRS = null; + destroyRenderScriptGL(); + } + } + +} diff --git a/src/com/slackito/testwallpaper/testwallpaper.rs b/src/com/slackito/testwallpaper/testwallpaper.rs new file mode 100644 index 0000000..586bb54 --- /dev/null +++ b/src/com/slackito/testwallpaper/testwallpaper.rs @@ -0,0 +1,88 @@ +#pragma version(1) + +#pragma rs java_package_name(com.slackito.testwallpaper) + +#include "rs_graphics.rsh" +#pragma stateVertex(parent); +#pragma stateStore(parent); + +//rs_allocation textureDot; + +//-- common stuff ----------------------------------------- +rs_allocation gColorBuffer; + +typedef struct Vertex_s { + float3 position; + float2 texCoord; +} Vertex; +Vertex *gQuadVertices; + +rs_mesh gQuadMesh; + +float densityDPI; + +static float screenWidth; +static float screenHeight; + +float xOffset; + + +//-- scene ------------------------------------------------ +rs_program_vertex gSceneVP; +rs_program_fragment gSceneFP; + +typedef struct SceneVpConsts { + rs_matrix4x4 MVP; + float scaleSize; +} SceneVpConsts_t; +SceneVpConsts_t *sceneVpConstants; + +typedef struct SceneFpConsts { + float offsetX; + float fracTime; +} SceneFpConsts_t; +SceneFpConsts_t *sceneFpConstants; + + +// post-processing ---------------------------------------- +rs_program_vertex gPostVP; +rs_program_fragment gPostFP; + + + +void init() { + screenWidth = rsgGetWidth(); + screenHeight = rsgGetHeight(); +} + +void renderScene() +{ + int64_t millis = rsUptimeMillis(); + float f = millis/4000.0f; + sceneFpConstants->fracTime = fmod(f, 1.0f); + sceneFpConstants->offsetX = xOffset; + rsgBindProgramVertex(gSceneVP); + rsgBindProgramFragment(gSceneFP); + + rsgClearColor(0.0f, 0.f, 0.f,1.0f); + rsgDrawMesh(gQuadMesh); +} + +void renderPostFX() +{ + rsgBindProgramVertex(gPostVP); + rsgBindProgramFragment(gPostFP); + rsgBindTexture(gPostFP, 0, gColorBuffer); + rsgDrawMesh(gQuadMesh); +} + + +int root() { + rsgBindColorTarget(gColorBuffer, 0); + renderScene(); + + rsgClearAllRenderTargets(); + renderPostFX(); + + return 66; // render again after 66ms +} -- 2.34.1