summaryrefslogtreecommitdiffstats
path: root/src/com/android/magicsmoke/MagicSmokeRS.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/magicsmoke/MagicSmokeRS.java')
-rw-r--r--src/com/android/magicsmoke/MagicSmokeRS.java82
1 files changed, 56 insertions, 26 deletions
diff --git a/src/com/android/magicsmoke/MagicSmokeRS.java b/src/com/android/magicsmoke/MagicSmokeRS.java
index 6183ec3..076453c 100644
--- a/src/com/android/magicsmoke/MagicSmokeRS.java
+++ b/src/com/android/magicsmoke/MagicSmokeRS.java
@@ -32,6 +32,7 @@ import android.os.Handler;
import android.renderscript.Allocation;
import android.renderscript.Dimension;
import android.renderscript.Element;
+import android.renderscript.Mesh;
import android.renderscript.Primitive;
import android.renderscript.ProgramFragment;
import android.renderscript.ProgramStore;
@@ -69,16 +70,20 @@ class MagicSmokeRS extends RenderScriptScene implements OnSharedPreferenceChange
//private Type mStateType;
//private Allocation mState;
- private ProgramStore mPfsBackgroundOne;
- private ProgramStore mPfsBackgroundSrc;
- private ProgramFragment mPfBackground;
- private Sampler mSampler;
+ private ProgramStore mPStore;
+ private ProgramFragment mPF5tex;
+ private ProgramFragment mPF4tex;
+ private Sampler[] mSampler;
private Allocation[] mSourceTextures;
private Allocation[] mRealTextures;
private ScriptC_clouds mScript;
- private ProgramVertex mPVBackground;
+ private ScriptField_VertexShaderConstants_s mVSConst;
+ private ScriptField_FragmentShaderConstants_s mFSConst;
+
+ private ProgramVertex mPV5tex;
+ private ProgramVertex mPV4tex;
private ProgramVertex.MatrixAllocation mPVAlloc;
private static final int RSID_STATE = 0;
@@ -314,14 +319,24 @@ class MagicSmokeRS extends RenderScriptScene implements OnSharedPreferenceChange
mScript = new ScriptC_clouds(mRS, mResources, R.raw.clouds, true);
- // First set up the coordinate system and such
- ProgramVertex.Builder pvb = new ProgramVertex.Builder(mRS, null, null);
- mPVBackground = pvb.create();
- mPVAlloc = new ProgramVertex.MatrixAllocation(mRS);
- mPVBackground.bindAllocation(mPVAlloc);
- mPVAlloc.setupProjectionNormalized(mWidth, mHeight);
+ mVSConst = new ScriptField_VertexShaderConstants_s(mRS, 1);
+ mScript.bind_gVSConstants(mVSConst);
+
+ {
+ ProgramVertex.ShaderBuilder builder = new ProgramVertex.ShaderBuilder(mRS);
+ builder.setShader(mResources, R.raw.pv5tex);
+ builder.addConstant(mVSConst.getAllocation().getType());
+ builder.addInput(ScriptField_VertexInputs_s.createElement(mRS));
+
+ mPV5tex = builder.create();
+ mPV5tex.bindConstants(mVSConst.getAllocation(), 0);
- mScript.set_gPVBackground(mPVBackground);
+ builder.setShader(mResources, R.raw.pv4tex);
+ mPV4tex = builder.create();
+ mPV4tex.bindConstants(mVSConst.getAllocation(), 0);
+ }
+ mScript.set_gPV5tex(mPV5tex);
+ mScript.set_gPV4tex(mPV4tex);
mSourceTextures = new Allocation[5];
mRealTextures = new Allocation[5];
@@ -337,31 +352,46 @@ class MagicSmokeRS extends RenderScriptScene implements OnSharedPreferenceChange
samplerBuilder.setMag(LINEAR);
samplerBuilder.setWrapS(WRAP);
samplerBuilder.setWrapT(WRAP);
- mSampler = samplerBuilder.create();
+ mSampler = new Sampler[5];
+ for (int i = 0; i < 5; i++)
+ mSampler[i] = samplerBuilder.create();
{
- ProgramFragment.Builder builder = new ProgramFragment.Builder(mRS);
- builder.setTexture(ProgramFragment.Builder.EnvMode.REPLACE,
- ProgramFragment.Builder.Format.RGBA, 0);
- mPfBackground = builder.create();
- mPfBackground.bindSampler(mSampler, 0);
+ mFSConst = new ScriptField_FragmentShaderConstants_s(mRS, 1);
+ mScript.bind_gFSConstants(mFSConst);
+
+ ProgramFragment.ShaderBuilder builder = new ProgramFragment.ShaderBuilder(mRS);
+ builder.setShader(mResources, R.raw.pf5tex);
+ builder.setTextureCount(5);
+ builder.addConstant(mFSConst.getAllocation().getType());
+
+ mPF5tex = builder.create();
+ for (int i = 0; i < 5; i++)
+ mPF5tex.bindSampler(mSampler[i], i);
+ mPF5tex.bindConstants(mFSConst.getAllocation(), 0);
+
+ builder.setShader(mResources, R.raw.pf4tex);
+ builder.setTextureCount(4);
+ mPF4tex = builder.create();
+ for (int i = 0; i < 4; i++)
+ mPF4tex.bindSampler(mSampler[i], i);
+ mPF4tex.bindConstants(mFSConst.getAllocation(), 0);
}
- mScript.set_gPFBackground(mPfBackground);
+ mScript.set_gPF5tex(mPF5tex);
+ mScript.set_gPF4tex(mPF4tex);
+
{
ProgramStore.Builder builder = new ProgramStore.Builder(mRS, null, null);
- builder.setDepthFunc(ProgramStore.DepthFunc.EQUAL);
- builder.setBlendFunc(BlendSrcFunc.ONE, BlendDstFunc.ONE_MINUS_SRC_ALPHA);
+ builder.setDepthFunc(ProgramStore.DepthFunc.ALWAYS);
+ builder.setBlendFunc(BlendSrcFunc.ONE, BlendDstFunc.ZERO);
builder.setDitherEnable(true); // without dithering there is severe banding
builder.setDepthMask(false);
- mPfsBackgroundOne = builder.create();
- builder.setBlendFunc(BlendSrcFunc.SRC_ALPHA, BlendDstFunc.ONE_MINUS_SRC_ALPHA);
- mPfsBackgroundSrc = builder.create();
+ mPStore = builder.create();
}
- mScript.set_gPFSBackgroundOne(mPfsBackgroundOne);
- mScript.set_gPFSBackgroundSrc(mPfsBackgroundSrc);
+ mScript.set_gPStore(mPStore);
mScript.set_gPreset(mWorldState.mPreset);
mScript.set_gTextureMask(mWorldState.mTextureMask);