NexusRS.java revision 6a500a1d5e15bd5a563995f31d0796552cc13640
1af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron/* 2af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron * Copyright (C) 2009 The Android Open Source Project 3af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron * 4af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron * Licensed under the Apache License, Version 2.0 (the "License"); 5af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron * you may not use this file except in compliance with the License. 6af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron * You may obtain a copy of the License at 7af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron * 8af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron * http://www.apache.org/licenses/LICENSE-2.0 9af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron * 10af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron * Unless required by applicable law or agreed to in writing, software 11af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron * distributed under the License is distributed on an "AS IS" BASIS, 12af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron * See the License for the specific language governing permissions and 14af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron * limitations under the License. 15af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron */ 16af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron 17af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleronpackage com.android.wallpaper.nexus; 18af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron 19af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleronimport static android.renderscript.Element.RGBA_8888; 20af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleronimport static android.renderscript.Element.RGB_565; 21af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleronimport static android.renderscript.ProgramStore.DepthFunc.ALWAYS; 22af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleronimport static android.renderscript.Sampler.Value.LINEAR; 236a500a1d5e15bd5a563995f31d0796552cc13640Jason Samsimport static android.renderscript.Sampler.Value.CLAMP; 24af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleronimport static android.renderscript.Sampler.Value.WRAP; 25af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron 26af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleronimport com.android.wallpaper.R; 27af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleronimport com.android.wallpaper.RenderScriptScene; 28af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron 296a500a1d5e15bd5a563995f31d0796552cc13640Jason Samsimport android.content.res.Resources; 30af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleronimport android.graphics.Bitmap; 31af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleronimport android.graphics.BitmapFactory; 32af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleronimport android.graphics.Rect; 33af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleronimport android.os.Bundle; 34af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleronimport android.renderscript.Allocation; 35af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleronimport android.renderscript.ProgramFragment; 36af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleronimport android.renderscript.ProgramStore; 37af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleronimport android.renderscript.ProgramVertex; 38af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleronimport android.renderscript.Sampler; 39af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleronimport android.renderscript.Script; 40af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleronimport android.renderscript.ScriptC; 41af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleronimport android.renderscript.Type; 42af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleronimport android.renderscript.ProgramStore.BlendDstFunc; 43af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleronimport android.renderscript.ProgramStore.BlendSrcFunc; 44af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleronimport android.view.SurfaceHolder; 45af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron 46af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleronimport java.util.TimeZone; 47af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron 48af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleronclass NexusRS extends RenderScriptScene { 49af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron 50af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron private static final int RSID_STATE = 0; 51c27d65349acd38f6ee8fd74bb01518062b0c0b0dJason Sams 52af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron private static final int RSID_COMMAND = 1; 53af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron 54af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron private static final int TEXTURES_COUNT = 3; 55af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron 56af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron private final BitmapFactory.Options mOptionsARGB = new BitmapFactory.Options(); 57af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron 58af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron private ProgramFragment mPfTexture; 596a500a1d5e15bd5a563995f31d0796552cc13640Jason Sams private ProgramFragment mPfTexture565; 60c27d65349acd38f6ee8fd74bb01518062b0c0b0dJason Sams 61af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron private ProgramFragment mPfColor; 62af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron 63af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron private ProgramStore mPsSolid; 64c27d65349acd38f6ee8fd74bb01518062b0c0b0dJason Sams 65af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron private ProgramStore mPsBlend; 66c27d65349acd38f6ee8fd74bb01518062b0c0b0dJason Sams 67af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron private ProgramVertex mPvOrtho; 68c27d65349acd38f6ee8fd74bb01518062b0c0b0dJason Sams 69af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron private ProgramVertex.MatrixAllocation mPvOrthoAlloc; 70af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron 716a500a1d5e15bd5a563995f31d0796552cc13640Jason Sams private Sampler mClampSampler; 726a500a1d5e15bd5a563995f31d0796552cc13640Jason Sams private Sampler mWrapSampler; 73af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron 74af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron private Allocation mState; 75c27d65349acd38f6ee8fd74bb01518062b0c0b0dJason Sams 76af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron private Type mStateType; 77af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron 78af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron private WorldState mWorldState; 79c27d65349acd38f6ee8fd74bb01518062b0c0b0dJason Sams 80af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron private Allocation mCommandAllocation; 81c27d65349acd38f6ee8fd74bb01518062b0c0b0dJason Sams 82af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron private Type mCommandType; 83af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron 84af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron private CommandState mCommand; 85af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron 86c27d65349acd38f6ee8fd74bb01518062b0c0b0dJason Sams private Allocation[] mTextures = new Allocation[TEXTURES_COUNT]; 87c27d65349acd38f6ee8fd74bb01518062b0c0b0dJason Sams 88af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron public NexusRS(int width, int height) { 89af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron super(width, height); 90af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron 91af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron mOptionsARGB.inScaled = false; 92af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron mOptionsARGB.inPreferredConfig = Bitmap.Config.ARGB_8888; 93af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron } 94af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron 95af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron @Override 96af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron public void setOffset(float xOffset, float yOffset, int xPixels, int yPixels) { 97af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron mWorldState.xOffset = xOffset; 98af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron mState.data(mWorldState); 99af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron } 100c27d65349acd38f6ee8fd74bb01518062b0c0b0dJason Sams 101af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron @Override 102af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron public void start() { 103af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron super.start(); 104af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron } 105af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron 106af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron @Override 107af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron public void resize(int width, int height) { 108af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron super.resize(width, height); 109af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron 110af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron mWorldState.width = width; 111af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron mWorldState.height = height; 112af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron mWorldState.rotate = width > height ? 1 : 0; 113af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron mState.data(mWorldState); 114af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron 115af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron mPvOrthoAlloc.setupOrthoWindow(mWidth, mHeight); 116af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron } 117af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron 118af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron @Override 119af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron protected ScriptC createScript() { 120af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron createProgramVertex(); 121af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron createProgramFragmentStore(); 122af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron createProgramFragment(); 123af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron createState(); 124af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron loadTextures(); 125af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron 126af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron ScriptC.Builder sb = new ScriptC.Builder(mRS); 127af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron sb.setType(mStateType, "State", RSID_STATE); 128af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron sb.setType(mCommandType, "Command", RSID_COMMAND); 129af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron sb.setScript(mResources, R.raw.nexus); 130af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron Script.Invokable invokable = sb.addInvokable("initPulses"); 131af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron sb.setRoot(true); 132af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron 133af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron ScriptC script = sb.create(); 134af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron script.setClearColor(0.0f, 0.0f, 0.0f, 1.0f); 135af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron script.setTimeZone(TimeZone.getDefault().getID()); 136af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron 137af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron script.bindAllocation(mState, RSID_STATE); 138af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron script.bindAllocation(mCommandAllocation, RSID_COMMAND); 139c27d65349acd38f6ee8fd74bb01518062b0c0b0dJason Sams 140af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron invokable.execute(); 141c27d65349acd38f6ee8fd74bb01518062b0c0b0dJason Sams 142af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron return script; 143af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron } 144af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron 145af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron static class WorldState { 146af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron public int width; 147af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron public int height; 148af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron public float glWidth; 149af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron public float glHeight; 150af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron public int rotate; 151af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron public int isPreview; 152af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron public float xOffset; 1536a500a1d5e15bd5a563995f31d0796552cc13640Jason Sams public int mode; 154af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron } 155af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron 156af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron static class CommandState { 157af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron public int x; 158af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron public int y; 159af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron public int command; 160af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron } 161af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron 162af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron private void createState() { 163af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron mWorldState = new WorldState(); 164af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron mWorldState.width = mWidth; 165af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron mWorldState.height = mHeight; 166af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron mWorldState.rotate = mWidth > mHeight ? 1 : 0; 167af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron mWorldState.isPreview = isPreview() ? 1 : 0; 168af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron 1696a500a1d5e15bd5a563995f31d0796552cc13640Jason Sams try { 1706a500a1d5e15bd5a563995f31d0796552cc13640Jason Sams mWorldState.mode = mResources.getInteger(R.integer.nexus_mode); 1716a500a1d5e15bd5a563995f31d0796552cc13640Jason Sams } catch (Resources.NotFoundException exc) { 1726a500a1d5e15bd5a563995f31d0796552cc13640Jason Sams mWorldState.mode = 0; // standard nexus mode 1736a500a1d5e15bd5a563995f31d0796552cc13640Jason Sams } 1746a500a1d5e15bd5a563995f31d0796552cc13640Jason Sams 175af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron mStateType = Type.createFromClass(mRS, WorldState.class, 1, "WorldState"); 176af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron mState = Allocation.createTyped(mRS, mStateType); 177af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron mState.data(mWorldState); 178c27d65349acd38f6ee8fd74bb01518062b0c0b0dJason Sams 179af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron mCommand = new CommandState(); 180af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron mCommand.x = -1; 181af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron mCommand.y = -1; 182af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron mCommand.command = 0; 183af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron 184af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron mCommandType = Type.createFromClass(mRS, CommandState.class, 1, "DropState"); 185af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron mCommandAllocation = Allocation.createTyped(mRS, mCommandType); 186af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron mCommandAllocation.data(mCommand); 187af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron } 188af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron 189af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron private void loadTextures() { 190c27d65349acd38f6ee8fd74bb01518062b0c0b0dJason Sams mTextures[0] = loadTexture(R.drawable.pyramid_background, "TBackground"); 191c27d65349acd38f6ee8fd74bb01518062b0c0b0dJason Sams mTextures[1] = loadTextureARGB(R.drawable.pulse, "TPulse"); 192c27d65349acd38f6ee8fd74bb01518062b0c0b0dJason Sams mTextures[2] = loadTextureARGB(R.drawable.glow, "TGlow"); 193c27d65349acd38f6ee8fd74bb01518062b0c0b0dJason Sams 194c27d65349acd38f6ee8fd74bb01518062b0c0b0dJason Sams final int count = mTextures.length; 195af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron for (int i = 0; i < count; i++) { 196c27d65349acd38f6ee8fd74bb01518062b0c0b0dJason Sams mTextures[i].uploadToTexture(0); 197af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron } 198af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron } 199af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron 200af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron private Allocation loadTexture(int id, String name) { 201af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron final Allocation allocation = Allocation.createFromBitmapResource(mRS, mResources, 202af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron id, RGB_565(mRS), false); 203af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron allocation.setName(name); 204af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron return allocation; 205af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron } 206af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron 207af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron private Allocation loadTextureARGB(int id, String name) { 208af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron Bitmap b = BitmapFactory.decodeResource(mResources, id, mOptionsARGB); 209af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron final Allocation allocation = Allocation.createFromBitmap(mRS, b, RGBA_8888(mRS), false); 210af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron allocation.setName(name); 211af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron return allocation; 212af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron } 213af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron 214af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron private void createProgramFragment() { 2156a500a1d5e15bd5a563995f31d0796552cc13640Jason Sams // sampler and program fragment for pulses 216af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron Sampler.Builder sampleBuilder = new Sampler.Builder(mRS); 217af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron sampleBuilder.setMin(LINEAR); 218af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron sampleBuilder.setMag(LINEAR); 219af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron sampleBuilder.setWrapS(WRAP); 220af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron sampleBuilder.setWrapT(WRAP); 2216a500a1d5e15bd5a563995f31d0796552cc13640Jason Sams mWrapSampler = sampleBuilder.create(); 2226a500a1d5e15bd5a563995f31d0796552cc13640Jason Sams ProgramFragment.Builder builder = new ProgramFragment.Builder(mRS); 2236a500a1d5e15bd5a563995f31d0796552cc13640Jason Sams builder.setTexture(ProgramFragment.Builder.EnvMode.MODULATE, 2246a500a1d5e15bd5a563995f31d0796552cc13640Jason Sams ProgramFragment.Builder.Format.RGBA, 0); 225af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron mPfTexture = builder.create(); 226af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron mPfTexture.setName("PFTexture"); 2276a500a1d5e15bd5a563995f31d0796552cc13640Jason Sams mPfTexture.bindSampler(mWrapSampler, 0); 228c27d65349acd38f6ee8fd74bb01518062b0c0b0dJason Sams 2296a500a1d5e15bd5a563995f31d0796552cc13640Jason Sams builder = new ProgramFragment.Builder(mRS); 2306a500a1d5e15bd5a563995f31d0796552cc13640Jason Sams builder.setTexture(ProgramFragment.Builder.EnvMode.REPLACE, 2316a500a1d5e15bd5a563995f31d0796552cc13640Jason Sams ProgramFragment.Builder.Format.RGB, 0); 232af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron mPfColor = builder.create(); 233af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron mPfColor.setName("PFColor"); 2346a500a1d5e15bd5a563995f31d0796552cc13640Jason Sams mPfColor.bindSampler(mWrapSampler, 0); 2356a500a1d5e15bd5a563995f31d0796552cc13640Jason Sams 2366a500a1d5e15bd5a563995f31d0796552cc13640Jason Sams // sampler and program fragment for background image 2376a500a1d5e15bd5a563995f31d0796552cc13640Jason Sams sampleBuilder.setWrapS(CLAMP); 2386a500a1d5e15bd5a563995f31d0796552cc13640Jason Sams sampleBuilder.setWrapT(CLAMP); 2396a500a1d5e15bd5a563995f31d0796552cc13640Jason Sams mClampSampler = sampleBuilder.create(); 2406a500a1d5e15bd5a563995f31d0796552cc13640Jason Sams builder = new ProgramFragment.Builder(mRS); 2416a500a1d5e15bd5a563995f31d0796552cc13640Jason Sams builder.setTexture(ProgramFragment.Builder.EnvMode.MODULATE, 2426a500a1d5e15bd5a563995f31d0796552cc13640Jason Sams ProgramFragment.Builder.Format.RGB, 0); 2436a500a1d5e15bd5a563995f31d0796552cc13640Jason Sams mPfTexture565 = builder.create(); 2446a500a1d5e15bd5a563995f31d0796552cc13640Jason Sams mPfTexture565.setName("PFTexture565"); 2456a500a1d5e15bd5a563995f31d0796552cc13640Jason Sams mPfTexture565.bindSampler(mClampSampler, 0); 246af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron } 247af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron 248af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron private void createProgramFragmentStore() { 249af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron ProgramStore.Builder builder = new ProgramStore.Builder(mRS, null, null); 250af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron builder.setDepthFunc(ALWAYS); 251af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron builder.setBlendFunc(BlendSrcFunc.ONE, BlendDstFunc.ONE); 252af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron builder.setDitherEnable(false); 253af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron builder.setDepthMask(true); 254af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron mPsSolid = builder.create(); 255af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron mPsSolid.setName("PSSolid"); 256c27d65349acd38f6ee8fd74bb01518062b0c0b0dJason Sams 257af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron builder = new ProgramStore.Builder(mRS, null, null); 258af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron builder.setDepthFunc(ALWAYS); 259af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron // builder.setBlendFunc(BlendSrcFunc.SRC_ALPHA, BlendDstFunc.ONE_MINUS_SRC_ALPHA); 260af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron builder.setBlendFunc(BlendSrcFunc.SRC_ALPHA, BlendDstFunc.ONE); 261af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron 262af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron builder.setDitherEnable(false); 263af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron builder.setDepthMask(true); 264af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron mPsBlend = builder.create(); 265af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron mPsBlend.setName("PSBlend"); 266af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron } 267af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron 268af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron private void createProgramVertex() { 269af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron mPvOrthoAlloc = new ProgramVertex.MatrixAllocation(mRS); 270af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron mPvOrthoAlloc.setupOrthoWindow(mWidth, mHeight); 271af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron 272af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron ProgramVertex.Builder pvb = new ProgramVertex.Builder(mRS, null, null); 273af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron pvb.setTextureMatrixEnable(true); 274af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron mPvOrtho = pvb.create(); 275af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron mPvOrtho.bindAllocation(mPvOrthoAlloc); 276af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron mPvOrtho.setName("PVOrtho"); 277af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron } 278af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron 279af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron @Override 280af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron public Bundle onCommand(String action, int x, int y, int z, Bundle extras, 281af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron boolean resultRequested) { 282af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron 283af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron final int dw = mWorldState.width; 284af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron final int bw = 960; 285af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron x = (int) (x + mWorldState.xOffset * (bw-dw)); 286c27d65349acd38f6ee8fd74bb01518062b0c0b0dJason Sams 287af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron if ("android.wallpaper.tap".equals(action)) { 288af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron sendCommand(1, x, y); 289af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron } else if ("android.home.drop".equals(action)) { 290af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron sendCommand(2, x, y); 291af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron } 292af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron return null; 293af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron } 294af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron 295af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron private void sendCommand(int command, int x, int y) { 296af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron mCommand.x = x; 297af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron mCommand.y = y; 298af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron mCommand.command = command; 299af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron mCommandAllocation.data(mCommand); 300af45d444c61a510f2f477a2a7ec01b2bdce25910Mike Cleron } 3016a500a1d5e15bd5a563995f31d0796552cc13640Jason Sams} 302