1dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines/*
2dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines * Copyright (C) 2008 The Android Open Source Project
3dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines *
4dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines * Licensed under the Apache License, Version 2.0 (the "License");
5dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines * you may not use this file except in compliance with the License.
6dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines * You may obtain a copy of the License at
7dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines *
8dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines *      http://www.apache.org/licenses/LICENSE-2.0
9dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines *
10dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines * Unless required by applicable law or agreed to in writing, software
11dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines * distributed under the License is distributed on an "AS IS" BASIS,
12dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines * See the License for the specific language governing permissions and
14dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines * limitations under the License.
15dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines */
16dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines
17dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hinespackage com.android.rs.test_v16;
18dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines
19dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hinesimport java.io.Writer;
20dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hinesimport java.util.ArrayList;
21dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hinesimport java.util.concurrent.Semaphore;
22dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines
23dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hinesimport android.renderscript.RSSurfaceView;
24dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hinesimport android.renderscript.RenderScript;
25dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hinesimport android.renderscript.RenderScriptGL;
26dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines
27dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hinesimport android.content.Context;
28dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hinesimport android.content.res.Resources;
29dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hinesimport android.graphics.Bitmap;
30dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hinesimport android.graphics.drawable.BitmapDrawable;
31dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hinesimport android.graphics.drawable.Drawable;
32dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hinesimport android.os.Handler;
33dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hinesimport android.os.Message;
34dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hinesimport android.util.AttributeSet;
35dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hinesimport android.util.Log;
36dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hinesimport android.view.Surface;
37dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hinesimport android.view.SurfaceHolder;
38dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hinesimport android.view.SurfaceView;
39dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hinesimport android.view.KeyEvent;
40dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hinesimport android.view.MotionEvent;
41dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines
42dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hinespublic class RSTestView extends RSSurfaceView {
43dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines
44dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines    private Context mCtx;
45dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines
46dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines    public RSTestView(Context context) {
47dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines        super(context);
48dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines        mCtx = context;
49dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines        //setFocusable(true);
50dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines    }
51dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines
52dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines    private RenderScriptGL mRS;
53dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines    private RSTestCore mRender;
54dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines
55dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
56dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines        super.surfaceChanged(holder, format, w, h);
57dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines        if (mRS == null) {
58dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines            RenderScriptGL.SurfaceConfig sc = new RenderScriptGL.SurfaceConfig();
59dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines            mRS = createRenderScriptGL(sc);
60dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines            mRS.setSurface(holder, w, h);
61dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines            mRender = new RSTestCore(mCtx);
62dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines            mRender.init(mRS, getResources(), w, h);
63dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines        }
64dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines    }
65dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines
66dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines    @Override
67dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines    protected void onDetachedFromWindow() {
68dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines        if(mRS != null) {
69dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines            mRender.cleanup();
70dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines            mRS = null;
71dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines            destroyRenderScriptGL();
72dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines        }
73dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines    }
74dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines
75dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines    @Override
76dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines    public boolean onKeyDown(int keyCode, KeyEvent event)
77dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines    {
78dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines        return super.onKeyDown(keyCode, event);
79dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines    }
80dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines
81dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines    @Override
82dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines    public boolean onTouchEvent(MotionEvent ev)
83dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines    {
84dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines        boolean ret = false;
85dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines        int act = ev.getAction();
86dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines        if (act == ev.ACTION_DOWN) {
87dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines            mRender.onActionDown((int)ev.getX(), (int)ev.getY());
88dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines            ret = true;
89dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines        }
90dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines        else if (act == ev.ACTION_MOVE) {
91dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines            mRender.onActionMove((int)ev.getX(), (int)ev.getY());
92dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines            ret = true;
93dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines        }
94dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines
95dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines        return ret;
96dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines    }
97dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines}
98