/* * Copyright (C) 2012 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.example.android.rs.sto; import android.content.res.Resources; import android.renderscript.*; import android.graphics.SurfaceTexture; import android.util.Log; public class SurfaceTextureOpaqueRS { static final private int NUM_CAMERA_PREVIEW_BUFFERS = 2; public SurfaceTextureOpaqueRS() { } private Resources mRes; private RenderScriptGL mRS; private ScriptC_sto mScript; private SurfaceTexture mST; private Allocation mSto; private Allocation mSto2; private Allocation mRto; private ProgramFragment mPF; public void init(RenderScriptGL rs, Resources res) { mRS = rs; mRes = res; Type.Builder tb = new Type.Builder(mRS, Element.RGBA_8888(mRS)); tb.setX(640); tb.setY(480); mSto = Allocation.createTyped(mRS, tb.create(), Allocation.USAGE_GRAPHICS_TEXTURE | Allocation.USAGE_IO_INPUT); mRto = Allocation.createTyped(mRS, tb.create(), Allocation.USAGE_GRAPHICS_RENDER_TARGET | Allocation.USAGE_IO_OUTPUT); mSto2 = Allocation.createTyped(mRS, tb.create(), Allocation.USAGE_GRAPHICS_TEXTURE | Allocation.USAGE_IO_INPUT); mST = mSto.getSurfaceTexture(); mRto.setSurfaceTexture(mSto2.getSurfaceTexture()); ProgramFragmentFixedFunction.Builder pfb = new ProgramFragmentFixedFunction.Builder(rs); pfb.setTexture(ProgramFragmentFixedFunction.Builder.EnvMode.REPLACE, ProgramFragmentFixedFunction.Builder.Format.RGBA, 0); mPF = pfb.create(); mPF.bindSampler(Sampler.CLAMP_NEAREST(mRS), 0); rs.bindProgramFragment(mPF); mScript = new ScriptC_sto(mRS, mRes, R.raw.sto); mScript.set_sto(mSto); mScript.set_rto(mRto); mScript.set_sto2(mSto2); mScript.set_pf(mPF); mRS.bindRootScript(mScript); android.util.Log.v("sto", "Init complete"); } SurfaceTexture getST() { return mST; } public void newFrame() { mSto.ioReceive(); } }