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