141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines/*
241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * Copyright (C) 2008 The Android Open Source Project
341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines *
441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * Licensed under the Apache License, Version 2.0 (the "License");
541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * you may not use this file except in compliance with the License.
641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * You may obtain a copy of the License at
741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines *
841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines *      http://www.apache.org/licenses/LICENSE-2.0
941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines *
1041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * Unless required by applicable law or agreed to in writing, software
1141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * distributed under the License is distributed on an "AS IS" BASIS,
1241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * See the License for the specific language governing permissions and
1441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * limitations under the License.
1541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines */
1641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines
1741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hinespackage com.android.fountain_v11;
1841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines
1941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hinesimport android.content.res.Resources;
2041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hinesimport android.renderscript.*;
2141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hinesimport android.util.Log;
2241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines
2341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines
2441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hinespublic class FountainRS {
2541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines    public static final int PART_COUNT = 50000;
2641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines
2741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines    public FountainRS() {
2841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines    }
2941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines
3041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines    private Resources mRes;
3141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines    private RenderScriptGL mRS;
3241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines    private ScriptC_fountain mScript;
3341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines    public void init(RenderScriptGL rs, Resources res, int width, int height) {
3441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines        mRS = rs;
3541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines        mRes = res;
3641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines
3741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines        ProgramFragmentFixedFunction.Builder pfb = new ProgramFragmentFixedFunction.Builder(rs);
3841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines        pfb.setVaryingColor(true);
3941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines        rs.bindProgramFragment(pfb.create());
4041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines
4141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines        ScriptField_Point points = new ScriptField_Point(mRS, PART_COUNT);//
4241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines //                                                        Allocation.USAGE_GRAPHICS_VERTEX);
4341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines
4441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines        Mesh.AllocationBuilder smb = new Mesh.AllocationBuilder(mRS);
4541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines        smb.addVertexAllocation(points.getAllocation());
4641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines        smb.addIndexSetType(Mesh.Primitive.POINT);
4741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines        Mesh sm = smb.create();
4841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines
4941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines        mScript = new ScriptC_fountain(mRS, mRes, R.raw.fountain);
5041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines        mScript.set_partMesh(sm);
5141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines        mScript.bind_point(points);
5241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines        mRS.bindRootScript(mScript);
5341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines    }
5441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines
5541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines    boolean holdingColor[] = new boolean[10];
5641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines    public void newTouchPosition(float x, float y, float pressure, int id) {
5741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines        if (id >= holdingColor.length) {
5841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines            return;
5941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines        }
6041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines        int rate = (int)(pressure * pressure * 500.f);
6141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines        if (rate > 500) {
6241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines            rate = 500;
6341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines        }
6441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines        if (rate > 0) {
6541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines            mScript.invoke_addParticles(rate, x, y, id, !holdingColor[id]);
6641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines            holdingColor[id] = true;
6741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines        } else {
6841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines            holdingColor[id] = false;
6941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines        }
7041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines
7141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines    }
7241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines}
73