1e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams/*
2e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams * Copyright (C) 2008 The Android Open Source Project
3e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams *
4e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams * Licensed under the Apache License, Version 2.0 (the "License");
5e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams * you may not use this file except in compliance with the License.
6e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams * You may obtain a copy of the License at
7e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams *
8e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams *      http://www.apache.org/licenses/LICENSE-2.0
9e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams *
10e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams * Unless required by applicable law or agreed to in writing, software
11e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams * distributed under the License is distributed on an "AS IS" BASIS,
12e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams * See the License for the specific language governing permissions and
14e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams * limitations under the License.
15e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams */
16e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams
17e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Samspackage com.example.android.rs.fountain;
18e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams
19e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Samsimport android.content.res.Resources;
20e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Samsimport android.renderscript.*;
21e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Samsimport android.util.Log;
22e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams
23e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams
24e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Samspublic class FountainRS {
25e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams    public static final int PART_COUNT = 50000;
26e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams
27e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams    public FountainRS() {
28e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams    }
29e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams
30e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams    private Resources mRes;
31e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams    private RenderScriptGL mRS;
32e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams    private ScriptC_fountain mScript;
33e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams    public void init(RenderScriptGL rs, Resources res) {
34e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams        mRS = rs;
35e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams        mRes = res;
36e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams
37e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams        ProgramFragmentFixedFunction.Builder pfb = new ProgramFragmentFixedFunction.Builder(rs);
38e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams        pfb.setVaryingColor(true);
39e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams        rs.bindProgramFragment(pfb.create());
40e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams
41e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams        ScriptField_Point points = new ScriptField_Point(mRS, PART_COUNT);//
42e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams //                                                        Allocation.USAGE_GRAPHICS_VERTEX);
43e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams
44e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams        Mesh.AllocationBuilder smb = new Mesh.AllocationBuilder(mRS);
45e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams        smb.addVertexAllocation(points.getAllocation());
46e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams        smb.addIndexSetType(Mesh.Primitive.POINT);
47e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams        Mesh sm = smb.create();
48e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams
49e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams        mScript = new ScriptC_fountain(mRS, mRes, R.raw.fountain);
50e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams        mScript.set_partMesh(sm);
51e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams        mScript.bind_point(points);
52e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams        mRS.bindRootScript(mScript);
53e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams    }
54e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams
55e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams    boolean holdingColor[] = new boolean[10];
56e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams    public void newTouchPosition(float x, float y, float pressure, int id) {
57e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams        if (id >= holdingColor.length) {
58e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams            return;
59e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams        }
60e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams        int rate = (int)(pressure * pressure * 500.f);
61e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams        if (rate > 500) {
62e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams            rate = 500;
63e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams        }
64e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams        if (rate > 0) {
65e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams            mScript.invoke_addParticles(rate, x, y, id, !holdingColor[id]);
66e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams            holdingColor[id] = true;
67e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams        } else {
68e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams            holdingColor[id] = false;
69e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams        }
70e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams
71e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams    }
72e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams}
73