176d6ea97b0d3e64787398a179e015443dde9c024Winson Chungpackage com.android.noisefield;
276d6ea97b0d3e64787398a179e015443dde9c024Winson Chung
376d6ea97b0d3e64787398a179e015443dde9c024Winson Chungimport android.content.Context;
476d6ea97b0d3e64787398a179e015443dde9c024Winson Chungimport android.renderscript.RSSurfaceView;
576d6ea97b0d3e64787398a179e015443dde9c024Winson Chungimport android.renderscript.RenderScriptGL;
676d6ea97b0d3e64787398a179e015443dde9c024Winson Chungimport android.view.SurfaceHolder;
776d6ea97b0d3e64787398a179e015443dde9c024Winson Chung
876d6ea97b0d3e64787398a179e015443dde9c024Winson Chungpublic class NoiseFieldView extends RSSurfaceView {
976d6ea97b0d3e64787398a179e015443dde9c024Winson Chung
1076d6ea97b0d3e64787398a179e015443dde9c024Winson Chung    private RenderScriptGL mRS;
1176d6ea97b0d3e64787398a179e015443dde9c024Winson Chung    private NoiseFieldRS mRender;
1276d6ea97b0d3e64787398a179e015443dde9c024Winson Chung
1376d6ea97b0d3e64787398a179e015443dde9c024Winson Chung    public NoiseFieldView(Context context) {
1476d6ea97b0d3e64787398a179e015443dde9c024Winson Chung        super(context);
1576d6ea97b0d3e64787398a179e015443dde9c024Winson Chung        setFocusable(true);
1676d6ea97b0d3e64787398a179e015443dde9c024Winson Chung        setFocusableInTouchMode(true);
1776d6ea97b0d3e64787398a179e015443dde9c024Winson Chung    }
1876d6ea97b0d3e64787398a179e015443dde9c024Winson Chung
1976d6ea97b0d3e64787398a179e015443dde9c024Winson Chung    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
2076d6ea97b0d3e64787398a179e015443dde9c024Winson Chung        super.surfaceChanged(holder, format, w, h);
2176d6ea97b0d3e64787398a179e015443dde9c024Winson Chung
2276d6ea97b0d3e64787398a179e015443dde9c024Winson Chung        if (mRS == null) {
2376d6ea97b0d3e64787398a179e015443dde9c024Winson Chung            RenderScriptGL.SurfaceConfig sc = new RenderScriptGL.SurfaceConfig();
2476d6ea97b0d3e64787398a179e015443dde9c024Winson Chung            mRS = createRenderScriptGL(sc);
2576d6ea97b0d3e64787398a179e015443dde9c024Winson Chung            mRS.setSurface(holder, w, h);
2676d6ea97b0d3e64787398a179e015443dde9c024Winson Chung
2776d6ea97b0d3e64787398a179e015443dde9c024Winson Chung            mRender = new NoiseFieldRS();
2876d6ea97b0d3e64787398a179e015443dde9c024Winson Chung            mRender.init(240, mRS, getResources(), w, h);
2976d6ea97b0d3e64787398a179e015443dde9c024Winson Chung        }
3076d6ea97b0d3e64787398a179e015443dde9c024Winson Chung    }
3176d6ea97b0d3e64787398a179e015443dde9c024Winson Chung
3276d6ea97b0d3e64787398a179e015443dde9c024Winson Chung    @Override
3376d6ea97b0d3e64787398a179e015443dde9c024Winson Chung    protected void onDetachedFromWindow() {
3476d6ea97b0d3e64787398a179e015443dde9c024Winson Chung        if (mRS != null) {
3576d6ea97b0d3e64787398a179e015443dde9c024Winson Chung            mRS.setSurface(null, 0, 0);
3676d6ea97b0d3e64787398a179e015443dde9c024Winson Chung            mRS = null;
3776d6ea97b0d3e64787398a179e015443dde9c024Winson Chung            destroyRenderScriptGL();
3876d6ea97b0d3e64787398a179e015443dde9c024Winson Chung        }
3976d6ea97b0d3e64787398a179e015443dde9c024Winson Chung    }
4076d6ea97b0d3e64787398a179e015443dde9c024Winson Chung
414f6e266df7b4384c43deeac4643a79dcf1063636Leon Hong}