private void createBackgroundMesh() { // The composition and colors of the background mesh were plotted on paper and photoshop // first then translated to the csv file in raw. Points and colors are not random. ArrayList meshData = new ArrayList(); InputStream inputStream = mRes.openRawResource(R.raw.bgmesh); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); try { String line; while ((line = reader.readLine()) != null) { meshData.add(line); } } catch (IOException e) { Log.e(LOG_TAG, "Unable to load background mesh from csv file."); } finally { try { inputStream.close(); } catch (IOException e) { Log.e(LOG_TAG, "Unable to close background mesh csv file."); } } int meshDataSize = meshData.size(); mVertexColors = new ScriptField_VertexColor_s(mRS, meshDataSize); for (int i = 0; i < meshDataSize; i++) { String line = (String) meshData.get(i); String[] values = line.split(","); float xPos = new Float(values[0]); float yPos = new Float(values[1]); float red = new Float(values[2]); float green = new Float(values[3]); float blue = new Float(values[4]); mVertexColors.set_position(i, new Float3(xPos, yPos, 0.0f), false); mVertexColors.set_color(i, new Float4(red, green, blue, 1.0f), false); } mVertexColors.copyAll(); Mesh.AllocationBuilder backgroundBuilder = new Mesh.AllocationBuilder(mRS); backgroundBuilder.addIndexSetType(Primitive.TRIANGLE); backgroundBuilder.addVertexAllocation(mVertexColors.getAllocation()); mScript.set_gBackgroundMesh(backgroundBuilder.create()); mScript.bind_vertexColors(mVertexColors); }
public void init(int dpi, RenderScriptGL rs, Resources res, int width, int height) { if (!mInited) { mDensityDPI = dpi; mRS = rs; mRes = res; mWidth = width; mHeight = height; mDotParticles = new ScriptField_Particle(mRS, DOT_COUNT); Mesh.AllocationBuilder smb2 = new Mesh.AllocationBuilder(mRS); smb2.addVertexAllocation(mDotParticles.getAllocation()); smb2.addIndexSetType(Mesh.Primitive.POINT); mDotMesh = smb2.create(); mBeamParticles = new ScriptField_Particle(mRS, DOT_COUNT); Mesh.AllocationBuilder smb3 = new Mesh.AllocationBuilder(mRS); smb3.addVertexAllocation(mBeamParticles.getAllocation()); smb3.addIndexSetType(Mesh.Primitive.POINT); mBeamMesh = smb3.create(); mScript = new ScriptC_phasebeam(mRS, mRes, R.raw.phasebeam); mScript.set_dotMesh(mDotMesh); mScript.set_beamMesh(mBeamMesh); mScript.bind_dotParticles(mDotParticles); mScript.bind_beamParticles(mBeamParticles); mPvConsts = new ScriptField_VpConsts(mRS, 1); createProgramVertex(); createProgramRaster(); createProgramFragmentStore(); createProgramFragment(); createBackgroundMesh(); loadTextures(); mScript.set_densityDPI(mDensityDPI); mRS.bindRootScript(mScript); mScript.invoke_positionParticles(); mInited = true; } }