1423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen/* 2423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen * Copyright (C) 2009 The Android Open Source Project 3423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen * 4423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen * Licensed under the Apache License, Version 2.0 (the "License"); 5423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen * you may not use this file except in compliance with the License. 6423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen * You may obtain a copy of the License at 7423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen * 8423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen * http://www.apache.org/licenses/LICENSE-2.0 9423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen * 10423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen * Unless required by applicable law or agreed to in writing, software 11423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen * distributed under the License is distributed on an "AS IS" BASIS, 12423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen * See the License for the specific language governing permissions and 14423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen * limitations under the License. 15423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen */ 16423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen 17423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissenpackage com.android.magicsmoke; 18423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen 19423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissenimport static android.renderscript.Sampler.Value.LINEAR; 20423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissenimport static android.renderscript.Sampler.Value.WRAP; 21423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen 22423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissenimport com.android.magicsmoke.R; 23423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen 24423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissenimport android.content.Context; 25423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissenimport android.content.SharedPreferences; 26423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissenimport android.content.SharedPreferences.Editor; 27423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissenimport android.content.SharedPreferences.OnSharedPreferenceChangeListener; 28423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissenimport android.graphics.Bitmap; 29423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissenimport android.graphics.BitmapFactory; 30423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissenimport android.media.MediaPlayer; 31423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissenimport android.os.Handler; 3293e6fb8d6b74f8be0768e70631daddb93c5a8cdaAlex Sakhartchoukimport android.renderscript.*; 33423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissenimport android.renderscript.Element.Builder; 34423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissenimport android.renderscript.ProgramStore.BlendDstFunc; 35423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissenimport android.renderscript.ProgramStore.BlendSrcFunc; 36423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissenimport android.util.Log; 37423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissenimport android.view.MotionEvent; 3831be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchoukimport android.os.Bundle; 39423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen 40423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissenimport java.util.TimeZone; 41423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen 42423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissenclass MagicSmokeRS extends RenderScriptScene implements OnSharedPreferenceChangeListener { 43423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen 44423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen static class WorldState { 45423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen public float mXOffset; 468d57c78704797dff5df2df2b10a08dec885fe489Marco Nelissen public float mYOffset; 47423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen public int mPreset; 48423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen public int mTextureMask; 49423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen public int mRotate; 50423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen public int mTextureSwap; 51100f6bf08f1153ea6f38776f52cc1dbc7683d867Marco Nelissen public int mProcessTextureMode; 52423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen public int mBackCol; 53423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen public int mLowCol; 54423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen public int mHighCol; 55423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen public float mAlphaMul; 56423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen public int mPreMul; 57423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen } 58423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen WorldState mWorldState = new WorldState(); 5931be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk //private Type mStateType; 6031be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk //private Allocation mState; 61423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen 62229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom private ProgramStore mPStore; 63229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom private ProgramFragment mPF5tex; 64229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom private ProgramFragment mPF4tex; 65229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom private Sampler[] mSampler; 66423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen private Allocation[] mSourceTextures; 67423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen private Allocation[] mRealTextures; 688a7a9cfb8516b13ccb6d149330575802075bbc3aJason Sams 691a1e3e46628df575cf7bcf7b449bed4c97873a6bStephen Hines private ScriptC_clouds mScript; 7031be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk 71229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom private ScriptField_VertexShaderConstants_s mVSConst; 72229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom private ScriptField_FragmentShaderConstants_s mFSConst; 73229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom 74229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom private ProgramVertex mPV5tex; 75229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom private ProgramVertex mPV4tex; 7693e6fb8d6b74f8be0768e70631daddb93c5a8cdaAlex Sakhartchouk private ProgramVertexFixedFunction.Constants mPVAlloc; 77423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen 78423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen private static final int RSID_STATE = 0; 79423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen //private static final int RSID_PROGRAMVERTEX = 3; 80423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen private static final int RSID_NOISESRC1 = 1; 81423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen private static final int RSID_NOISESRC2 = 2; 82423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen private static final int RSID_NOISESRC3 = 3; 83423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen private static final int RSID_NOISESRC4 = 4; 84423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen private static final int RSID_NOISESRC5 = 5; 85423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen private static final int RSID_NOISEDST1 = 6; 86423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen private static final int RSID_NOISEDST2 = 7; 87423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen private static final int RSID_NOISEDST3 = 8; 88423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen private static final int RSID_NOISEDST4 = 9; 89423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen private static final int RSID_NOISEDST5 = 10; 90423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen 91423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen private Context mContext; 92423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen private SharedPreferences mSharedPref; 938a7a9cfb8516b13ccb6d149330575802075bbc3aJason Sams 94423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen static class Preset { 95100f6bf08f1153ea6f38776f52cc1dbc7683d867Marco Nelissen Preset(int processmode, int backcol, int locol, int hicol, float mul, int mask, 968792d8164337191fe53c161ad21a7da02843cadeStephen Hines boolean rot, boolean texswap, boolean premul) { 97100f6bf08f1153ea6f38776f52cc1dbc7683d867Marco Nelissen mProcessTextureMode = processmode; 98423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen mBackColor = backcol; 99423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen mLowColor = locol; 100423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen mHighColor = hicol; 101423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen mAlphaMul = mul; 102423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen mTextureMask = mask; 103423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen mRotate = rot; 104423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen mTextureSwap = texswap; 105423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen mPreMul = premul; 106423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen } 107100f6bf08f1153ea6f38776f52cc1dbc7683d867Marco Nelissen public int mProcessTextureMode; 108423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen public int mBackColor; 109423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen public int mLowColor; 110423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen public int mHighColor; 111423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen public float mAlphaMul; 112423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen public int mTextureMask; 113423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen public boolean mRotate; 114423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen public boolean mTextureSwap; 115423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen public boolean mPreMul; 116423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen } 117423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen 118ce631a529b74ae79acc0d37da34a5ce8722fbc8cMarco Nelissen public static final int DEFAULT_PRESET = 16; 119423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen public static final Preset [] mPreset = new Preset[] { 1208792d8164337191fe53c161ad21a7da02843cadeStephen Hines // proc back low high alph mask rot swap premul 1218792d8164337191fe53c161ad21a7da02843cadeStephen Hines new Preset(1, 0x000000, 0x000000, 0xffffff, 2.0f, 0x0f, true, false, false), 1228792d8164337191fe53c161ad21a7da02843cadeStephen Hines new Preset(1, 0x0000ff, 0x000000, 0xffffff, 2.0f, 0x0f, true, false, false), 1238792d8164337191fe53c161ad21a7da02843cadeStephen Hines new Preset(1, 0x00ff00, 0x000000, 0xffffff, 2.0f, 0x0f, true, false, false), 1248792d8164337191fe53c161ad21a7da02843cadeStephen Hines new Preset(1, 0x00ff00, 0x000000, 0xffffff, 2.0f, 0x0f, true, false, true), 1258792d8164337191fe53c161ad21a7da02843cadeStephen Hines new Preset(1, 0x00ff00, 0x00ff00, 0xffffff, 2.5f, 0x1f, true, true, true), 1268792d8164337191fe53c161ad21a7da02843cadeStephen Hines new Preset(1, 0x800000, 0xff0000, 0xffffff, 2.5f, 0x1f, true, true, false), 1278792d8164337191fe53c161ad21a7da02843cadeStephen Hines new Preset(0, 0x000000, 0x000000, 0xffffff, 0.0f, 0x1f, true, false, false), 1288792d8164337191fe53c161ad21a7da02843cadeStephen Hines new Preset(1, 0x0000ff, 0x00ff00, 0xffff00, 2.0f, 0x1f, true, true, false), 1298792d8164337191fe53c161ad21a7da02843cadeStephen Hines new Preset(1, 0x008000, 0x00ff00, 0xffffff, 2.5f, 0x1f, true, true, false), 1308792d8164337191fe53c161ad21a7da02843cadeStephen Hines new Preset(1, 0x800000, 0xff0000, 0xffffff, 2.5f, 0x1f, true, true, true), 1318792d8164337191fe53c161ad21a7da02843cadeStephen Hines new Preset(1, 0x808080, 0x000000, 0xffffff, 2.0f, 0x0f, true, false, true), 1328792d8164337191fe53c161ad21a7da02843cadeStephen Hines new Preset(1, 0x0000ff, 0x000000, 0xffffff, 2.0f, 0x0f, true, false, true), 1338792d8164337191fe53c161ad21a7da02843cadeStephen Hines new Preset(1, 0x0000ff, 0x00ff00, 0xffff00, 1.5f, 0x1f, false, false, true), 1348792d8164337191fe53c161ad21a7da02843cadeStephen Hines new Preset(1, 0x0000ff, 0x00ff00, 0xffff00, 2.0f, 0x1f, true, true, true), 1358792d8164337191fe53c161ad21a7da02843cadeStephen Hines new Preset(1, 0x0000ff, 0x00ff00, 0xffff00, 1.5f, 0x1f, true, true, true), 1368792d8164337191fe53c161ad21a7da02843cadeStephen Hines new Preset(1, 0x808080, 0x000000, 0xffffff, 2.0f, 0x0f, true, false, false), 1378792d8164337191fe53c161ad21a7da02843cadeStephen Hines new Preset(1, 0x000000, 0x000000, 0xffffff, 2.0f, 0x0f, true, true, false), 1388792d8164337191fe53c161ad21a7da02843cadeStephen Hines new Preset(2, 0x000000, 0x000070, 0xff2020, 2.5f, 0x1f, true, false, false), 1398792d8164337191fe53c161ad21a7da02843cadeStephen Hines new Preset(2, 0x6060ff, 0x000070, 0xffffff, 2.5f, 0x1f, true, false, false), 1408792d8164337191fe53c161ad21a7da02843cadeStephen Hines new Preset(3, 0x0000f0, 0x000000, 0xffffff, 2.0f, 0x0f, true, true, false), 141423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen }; 1428a7a9cfb8516b13ccb6d149330575802075bbc3aJason Sams 143423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen private float mTouchY; 1448a7a9cfb8516b13ccb6d149330575802075bbc3aJason Sams 145423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen MagicSmokeRS(Context context, int width, int height) { 146423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen super(width, height); 147423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen mWidth = width; 148423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen mHeight = height; 149423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen mContext = context; 150423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen mSharedPref = mContext.getSharedPreferences("magicsmoke", Context.MODE_PRIVATE); 151ce631a529b74ae79acc0d37da34a5ce8722fbc8cMarco Nelissen mSharedPref.registerOnSharedPreferenceChangeListener(this); 152423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen makeNewState(); 153423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen } 154423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen 155423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { 156423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen 157ce631a529b74ae79acc0d37da34a5ce8722fbc8cMarco Nelissen if (!mIsStarted) { 158ce631a529b74ae79acc0d37da34a5ce8722fbc8cMarco Nelissen start(); 159ce631a529b74ae79acc0d37da34a5ce8722fbc8cMarco Nelissen mRS.finish(); 160ce631a529b74ae79acc0d37da34a5ce8722fbc8cMarco Nelissen stop(false); 161ce631a529b74ae79acc0d37da34a5ce8722fbc8cMarco Nelissen } else { 162ce631a529b74ae79acc0d37da34a5ce8722fbc8cMarco Nelissen makeNewState(); 163ce631a529b74ae79acc0d37da34a5ce8722fbc8cMarco Nelissen } 164423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen } 165423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen 166423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen void makeNewState() { 167423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen int p = mSharedPref.getInt("preset", DEFAULT_PRESET); 168423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen if (p >= mPreset.length) { 169423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen p = 0; 170423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen } 171423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen mWorldState.mPreset = p; 172423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen mWorldState.mTextureMask = mPreset[p].mTextureMask; 173423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen mWorldState.mRotate = mPreset[p].mRotate ? 1 : 0; 174423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen mWorldState.mTextureSwap = mPreset[p].mTextureSwap ? 1 : 0; 175100f6bf08f1153ea6f38776f52cc1dbc7683d867Marco Nelissen mWorldState.mProcessTextureMode = mPreset[p].mProcessTextureMode; 176423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen mWorldState.mBackCol = mPreset[p].mBackColor; 177423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen mWorldState.mLowCol = mPreset[p].mLowColor; 178423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen mWorldState.mHighCol = mPreset[p].mHighColor; 179423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen mWorldState.mAlphaMul = mPreset[p].mAlphaMul; 180423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen mWorldState.mPreMul = mPreset[p].mPreMul ? 1 : 0; 18131be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk 18231be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk if(mScript != null) { 18331be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk mScript.set_gPreset(mWorldState.mPreset); 18431be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk mScript.set_gTextureMask(mWorldState.mTextureMask); 18531be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk mScript.set_gRotate(mWorldState.mRotate); 18631be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk mScript.set_gTextureSwap(mWorldState.mTextureSwap); 18731be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk mScript.set_gProcessTextureMode(mWorldState.mProcessTextureMode); 18831be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk mScript.set_gBackCol(mWorldState.mBackCol); 18931be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk mScript.set_gLowCol(mWorldState.mLowCol); 19031be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk mScript.set_gHighCol(mWorldState.mHighCol); 19131be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk mScript.set_gAlphaMul(mWorldState.mAlphaMul); 19231be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk mScript.set_gPreMul(mWorldState.mPreMul); 19331be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk } 194423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen } 1958a7a9cfb8516b13ccb6d149330575802075bbc3aJason Sams 196423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen @Override 197423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen public void resize(int width, int height) { 198423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen super.resize(width, height); 199423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen if (mPVAlloc != null) { 20093e6fb8d6b74f8be0768e70631daddb93c5a8cdaAlex Sakhartchouk Matrix4f proj = new Matrix4f(); 20193e6fb8d6b74f8be0768e70631daddb93c5a8cdaAlex Sakhartchouk proj.loadProjectionNormalized(width, height); 20293e6fb8d6b74f8be0768e70631daddb93c5a8cdaAlex Sakhartchouk mPVAlloc.setProjection(proj); 203423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen } 204423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen } 205423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen 206423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen @Override 20731be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk public Bundle onCommand(String action, int x, int y, int z, Bundle extras, 20831be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk boolean resultRequested) { 20931be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk 21031be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk if ("android.wallpaper.tap".equals(action)) { 21131be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk mTouchY = y; 21231be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk } 21331be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk return null; 21431be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk } 21531be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk 21631be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk /*@Override 217423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen public void onTouchEvent(MotionEvent event) { 218423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen switch(event.getAction()) { 219423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen case MotionEvent.ACTION_DOWN: 220423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen mTouchY = event.getY(); 221423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen break; 222423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen case MotionEvent.ACTION_MOVE: 223423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen float dy = event.getY() - mTouchY; 224423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen mTouchY += dy; 225423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen dy /= 20; 226423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen if (dy > 4) { 227423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen dy = 4; 228423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen } else if (dy < -4) { 229423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen dy = -4; 230423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen } 23131be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk //mState.data(mWorldState); 232423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen } 23331be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk }*/ 2348a7a9cfb8516b13ccb6d149330575802075bbc3aJason Sams 235423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen @Override 2368d57c78704797dff5df2df2b10a08dec885fe489Marco Nelissen public void setOffset(float xOffset, float yOffset, float xStep, float yStep, int xPixels, int yPixels) { 237423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen // update our state, then push it to the renderscript 238423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen mWorldState.mXOffset = xOffset; 2398d57c78704797dff5df2df2b10a08dec885fe489Marco Nelissen mWorldState.mYOffset = yOffset; 24031be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk mScript.set_gXOffset(mWorldState.mXOffset); 2418d57c78704797dff5df2df2b10a08dec885fe489Marco Nelissen mScript.set_gYOffset(mWorldState.mYOffset); 242423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen } 243423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen 244423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen @Override 245ce631a529b74ae79acc0d37da34a5ce8722fbc8cMarco Nelissen public void stop(boolean forReal) { 246ce631a529b74ae79acc0d37da34a5ce8722fbc8cMarco Nelissen if (forReal) { 247ce631a529b74ae79acc0d37da34a5ce8722fbc8cMarco Nelissen mSharedPref.unregisterOnSharedPreferenceChangeListener(this); 248ce631a529b74ae79acc0d37da34a5ce8722fbc8cMarco Nelissen } 249ce631a529b74ae79acc0d37da34a5ce8722fbc8cMarco Nelissen super.stop(forReal); 250423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen } 251423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen 252423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen @Override 253423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen public void start() { 254423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen makeNewState(); 255ce631a529b74ae79acc0d37da34a5ce8722fbc8cMarco Nelissen super.start(); 256423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen } 2578a7a9cfb8516b13ccb6d149330575802075bbc3aJason Sams 258423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen float alphafactor; 259423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen Type mTextureType; 2608a7a9cfb8516b13ccb6d149330575802075bbc3aJason Sams 261423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen void loadBitmap(int id, int index, String name, float alphamul, int lowcol, int highcol) { 262423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen BitmapFactory.Options opts = new BitmapFactory.Options(); 263423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen opts.inPreferredConfig = Bitmap.Config.ARGB_8888; 264423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen Bitmap in = BitmapFactory.decodeResource(mResources, id, opts); 265423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen 266f50de7e2660498d0c606597982639090ac1a8235Marco Nelissen // Bitmaps are stored in memory in premultiplied form. We want non-premultiplied, 267f50de7e2660498d0c606597982639090ac1a8235Marco Nelissen // which is what getPixels gives us. 268423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen int pixels[] = new int[65536]; 269423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen in.getPixels(pixels, 0, 256, 0, 0, 256, 256); 2701316636ac28004152cffcb1c8795997c7a33765dJason Sams mRealTextures[index] = Allocation.createTyped(mRS, mTextureType, 2711316636ac28004152cffcb1c8795997c7a33765dJason Sams Allocation.MipmapControl.MIPMAP_NONE, 2721316636ac28004152cffcb1c8795997c7a33765dJason Sams Allocation.USAGE_SCRIPT | 2731316636ac28004152cffcb1c8795997c7a33765dJason Sams Allocation.USAGE_GRAPHICS_TEXTURE); 2741316636ac28004152cffcb1c8795997c7a33765dJason Sams mSourceTextures[index] = Allocation.createTyped(mRS, mTextureType, 2751316636ac28004152cffcb1c8795997c7a33765dJason Sams Allocation.MipmapControl.MIPMAP_NONE, 2761316636ac28004152cffcb1c8795997c7a33765dJason Sams Allocation.USAGE_SCRIPT); 277f50de7e2660498d0c606597982639090ac1a8235Marco Nelissen 278f50de7e2660498d0c606597982639090ac1a8235Marco Nelissen // copyFrom needs a byte[], not an int[], so we need to copy the data first 279f50de7e2660498d0c606597982639090ac1a8235Marco Nelissen byte bpixels[] = new byte[65536*4]; 280f50de7e2660498d0c606597982639090ac1a8235Marco Nelissen for (int i = 0; i < 65536; i++) { 281f50de7e2660498d0c606597982639090ac1a8235Marco Nelissen bpixels[i * 4 + 0] = (byte)(pixels[i] & 0xff); 282f50de7e2660498d0c606597982639090ac1a8235Marco Nelissen bpixels[i * 4 + 1] = (byte)((pixels[i] >> 8) & 0xff); 283f50de7e2660498d0c606597982639090ac1a8235Marco Nelissen bpixels[i * 4 + 2] = (byte)((pixels[i] >>16) & 0xff); 284f50de7e2660498d0c606597982639090ac1a8235Marco Nelissen bpixels[i * 4 + 3] = (byte)((pixels[i] >> 24) & 0xff); 285f50de7e2660498d0c606597982639090ac1a8235Marco Nelissen } 286f50de7e2660498d0c606597982639090ac1a8235Marco Nelissen mSourceTextures[index].copyFrom(bpixels); 287423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen in.recycle(); 288423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen } 289423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen 290423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen void loadBitmaps() { 291423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen alphafactor = 1f; 292423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen float alphamul = mPreset[mWorldState.mPreset].mAlphaMul; 293423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen int lowcol = mPreset[mWorldState.mPreset].mLowColor; 294423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen int highcol = mPreset[mWorldState.mPreset].mHighColor; 295423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen //Log.i("@@@@", "preset " + mWorldState.mPreset + ", mul: " + alphamul + 296423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen // ", colors: " + Integer.toHexString(lowcol) + "/" + Integer.toHexString(highcol)); 2978a7a9cfb8516b13ccb6d149330575802075bbc3aJason Sams 298423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen // TODO: using different high and low colors for each layer offers some cool effects too 299423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen loadBitmap(R.drawable.noise1, 0, "Tnoise1", alphamul, lowcol, highcol); 300423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen loadBitmap(R.drawable.noise2, 1, "Tnoise2", alphamul, lowcol, highcol); 301423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen loadBitmap(R.drawable.noise3, 2, "Tnoise3", alphamul, lowcol, highcol); 302423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen loadBitmap(R.drawable.noise4, 3, "Tnoise4", alphamul, lowcol, highcol); 303423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen loadBitmap(R.drawable.noise5, 4, "Tnoise5", alphamul, lowcol, highcol); 30431be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk 30531be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk mScript.set_gTnoise1(mRealTextures[0]); 30631be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk mScript.set_gTnoise2(mRealTextures[1]); 30731be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk mScript.set_gTnoise3(mRealTextures[2]); 30831be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk mScript.set_gTnoise4(mRealTextures[3]); 30931be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk mScript.set_gTnoise5(mRealTextures[4]); 31031be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk 31131be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk mScript.bind_gNoisesrc1(mSourceTextures[0]); 31231be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk mScript.bind_gNoisesrc2(mSourceTextures[1]); 31331be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk mScript.bind_gNoisesrc3(mSourceTextures[2]); 31431be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk mScript.bind_gNoisesrc4(mSourceTextures[3]); 31531be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk mScript.bind_gNoisesrc5(mSourceTextures[4]); 31631be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk 31731be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk mScript.bind_gNoisedst1(mRealTextures[0]); 31831be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk mScript.bind_gNoisedst2(mRealTextures[1]); 31931be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk mScript.bind_gNoisedst3(mRealTextures[2]); 32031be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk mScript.bind_gNoisedst4(mRealTextures[3]); 32131be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk mScript.bind_gNoisedst5(mRealTextures[4]); 322423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen } 3238a7a9cfb8516b13ccb6d149330575802075bbc3aJason Sams 324423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen @Override 325423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen protected ScriptC createScript() { 32631be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk 327c71a2cb5b010ef13edba639bd214d9fa9922567aJason Sams mScript = new ScriptC_clouds(mRS, mResources, R.raw.clouds); 328423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen 329229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom mVSConst = new ScriptField_VertexShaderConstants_s(mRS, 1); 330229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom mScript.bind_gVSConstants(mVSConst); 331229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom 332229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom { 33393e6fb8d6b74f8be0768e70631daddb93c5a8cdaAlex Sakhartchouk ProgramVertex.Builder builder = new ProgramVertex.Builder(mRS); 334229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom builder.setShader(mResources, R.raw.pv5tex); 335229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom builder.addConstant(mVSConst.getAllocation().getType()); 336229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom builder.addInput(ScriptField_VertexInputs_s.createElement(mRS)); 337229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom 338229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom mPV5tex = builder.create(); 339229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom mPV5tex.bindConstants(mVSConst.getAllocation(), 0); 340423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen 341229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom builder.setShader(mResources, R.raw.pv4tex); 342229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom mPV4tex = builder.create(); 343229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom mPV4tex.bindConstants(mVSConst.getAllocation(), 0); 344229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom } 345229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom mScript.set_gPV5tex(mPV5tex); 346229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom mScript.set_gPV4tex(mPV4tex); 34731be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk 348423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen mSourceTextures = new Allocation[5]; 349423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen mRealTextures = new Allocation[5]; 3508a7a9cfb8516b13ccb6d149330575802075bbc3aJason Sams 351423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen Type.Builder tb = new Type.Builder(mRS, Element.RGBA_8888(mRS)); 352c71a2cb5b010ef13edba639bd214d9fa9922567aJason Sams tb.setX(256); 353c71a2cb5b010ef13edba639bd214d9fa9922567aJason Sams tb.setY(256); 354423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen mTextureType = tb.create(); 355423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen loadBitmaps(); 3568a7a9cfb8516b13ccb6d149330575802075bbc3aJason Sams 357423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen Sampler.Builder samplerBuilder = new Sampler.Builder(mRS); 35893e6fb8d6b74f8be0768e70631daddb93c5a8cdaAlex Sakhartchouk samplerBuilder.setMinification(LINEAR); 35993e6fb8d6b74f8be0768e70631daddb93c5a8cdaAlex Sakhartchouk samplerBuilder.setMagnification(LINEAR); 360423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen samplerBuilder.setWrapS(WRAP); 361423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen samplerBuilder.setWrapT(WRAP); 362229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom mSampler = new Sampler[5]; 363229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom for (int i = 0; i < 5; i++) 364229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom mSampler[i] = samplerBuilder.create(); 365423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen 366423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen { 367229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom mFSConst = new ScriptField_FragmentShaderConstants_s(mRS, 1); 368229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom mScript.bind_gFSConstants(mFSConst); 369229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom 37093e6fb8d6b74f8be0768e70631daddb93c5a8cdaAlex Sakhartchouk ProgramFragment.Builder builder = new ProgramFragment.Builder(mRS); 371229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom builder.setShader(mResources, R.raw.pf5tex); 37293e6fb8d6b74f8be0768e70631daddb93c5a8cdaAlex Sakhartchouk for (int texCount = 0; texCount < 5; texCount ++) { 37393e6fb8d6b74f8be0768e70631daddb93c5a8cdaAlex Sakhartchouk builder.addTexture(Program.TextureType.TEXTURE_2D); 37493e6fb8d6b74f8be0768e70631daddb93c5a8cdaAlex Sakhartchouk } 375229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom builder.addConstant(mFSConst.getAllocation().getType()); 376229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom 377229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom mPF5tex = builder.create(); 378229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom for (int i = 0; i < 5; i++) 379229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom mPF5tex.bindSampler(mSampler[i], i); 380229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom mPF5tex.bindConstants(mFSConst.getAllocation(), 0); 381229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom 38293e6fb8d6b74f8be0768e70631daddb93c5a8cdaAlex Sakhartchouk builder = new ProgramFragment.Builder(mRS); 383229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom builder.setShader(mResources, R.raw.pf4tex); 38493e6fb8d6b74f8be0768e70631daddb93c5a8cdaAlex Sakhartchouk for (int texCount = 0; texCount < 4; texCount ++) { 38593e6fb8d6b74f8be0768e70631daddb93c5a8cdaAlex Sakhartchouk builder.addTexture(Program.TextureType.TEXTURE_2D); 38693e6fb8d6b74f8be0768e70631daddb93c5a8cdaAlex Sakhartchouk } 38793e6fb8d6b74f8be0768e70631daddb93c5a8cdaAlex Sakhartchouk builder.addConstant(mFSConst.getAllocation().getType()); 388229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom mPF4tex = builder.create(); 389229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom for (int i = 0; i < 4; i++) 390229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom mPF4tex.bindSampler(mSampler[i], i); 391229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom mPF4tex.bindConstants(mFSConst.getAllocation(), 0); 392423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen } 393423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen 394229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom mScript.set_gPF5tex(mPF5tex); 395229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom mScript.set_gPF4tex(mPF4tex); 396229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom 39731be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk 398423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen { 39993e6fb8d6b74f8be0768e70631daddb93c5a8cdaAlex Sakhartchouk ProgramStore.Builder builder = new ProgramStore.Builder(mRS); 400229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom builder.setDepthFunc(ProgramStore.DepthFunc.ALWAYS); 401229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom builder.setBlendFunc(BlendSrcFunc.ONE, BlendDstFunc.ZERO); 40293e6fb8d6b74f8be0768e70631daddb93c5a8cdaAlex Sakhartchouk builder.setDitherEnabled(true); // without dithering there is severe banding 40393e6fb8d6b74f8be0768e70631daddb93c5a8cdaAlex Sakhartchouk builder.setDepthMaskEnabled(false); 404229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom mPStore = builder.create(); 405423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen } 406423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen 407229c496d4a47bd610c97af0578ce6b1e2a982c57Fredrik Ehnbom mScript.set_gPStore(mPStore); 40831be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk 40931be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk mScript.set_gPreset(mWorldState.mPreset); 41031be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk mScript.set_gTextureMask(mWorldState.mTextureMask); 41131be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk mScript.set_gRotate(mWorldState.mRotate); 41231be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk mScript.set_gTextureSwap(mWorldState.mTextureSwap); 41331be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk mScript.set_gProcessTextureMode(mWorldState.mProcessTextureMode); 41431be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk mScript.set_gBackCol(mWorldState.mBackCol); 41531be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk mScript.set_gLowCol(mWorldState.mLowCol); 41631be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk mScript.set_gHighCol(mWorldState.mHighCol); 41731be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk mScript.set_gAlphaMul(mWorldState.mAlphaMul); 41831be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk mScript.set_gPreMul(mWorldState.mPreMul); 41931be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk mScript.set_gXOffset(mWorldState.mXOffset); 42031be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk 42131be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk return mScript; 422423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen } 423423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen} 424