public Render(Context context, float scale, int dim) { rs = RenderScript.create(context); rs.setMessageHandler(new Ready()); render = new ScriptC_render(rs); render.set_seed(RANDOM.nextInt()); render.set_invDim(1.0f / dim); Log.i(TAG, String.format("Render seed: %d", render.get_seed())); fxaa = new ScriptC_fxaa(rs); fxaa.set_sampler(Sampler.CLAMP_LINEAR(rs)); fxaa.set_dim(dim); fxaa.set_pixWidth(1.0f / dim); if (scale != 0) { render.set_scale(scale); } else { float randomScale = RANDOM.nextFloat() * 5 + (1.5f * 1.5f); randomScale = (float) Math.sqrt(randomScale); randomScale *= RANDOM.nextBoolean() ? -1 : 1; Log.i(TAG, String.format("Random scale value: %.3f", randomScale)); render.set_scale(randomScale); } long time1 = System.currentTimeMillis(); render.invoke_randomize_position(); rs.finish(); long time2 = System.currentTimeMillis(); render.invoke_collect_exposure(); rs.finish(); long time3 = System.currentTimeMillis(); Log.i(TAG, String.format("Starting position in %d ms, exposure in %d ms", time2 - time1, time3 - time2)); bm2 = Bitmap.createBitmap(dim, dim, Bitmap.Config.ARGB_8888); abm1 = Allocation.createFromBitmap(rs, bm2); abm2 = Allocation.createFromBitmap(rs, bm2); }