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