141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines/*
241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * Copyright (C) 2008 The Android Open Source Project
341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines *
441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * Licensed under the Apache License, Version 2.0 (the "License");
541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * you may not use this file except in compliance with the License.
641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * You may obtain a copy of the License at
741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines *
841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines *      http://www.apache.org/licenses/LICENSE-2.0
941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines *
1041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * Unless required by applicable law or agreed to in writing, software
1141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * distributed under the License is distributed on an "AS IS" BASIS,
1241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * See the License for the specific language governing permissions and
1441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * limitations under the License.
1541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines */
1641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines
1741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hinespackage com.android.rs.test_v11;
1841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines
1941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hinesimport java.io.Writer;
2041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hinesimport java.util.ArrayList;
2141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hinesimport java.util.concurrent.Semaphore;
2241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines
2341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hinesimport android.renderscript.RSSurfaceView;
2441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hinesimport android.renderscript.RenderScript;
2541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hinesimport android.renderscript.RenderScriptGL;
2641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines
2741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hinesimport android.content.Context;
2841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hinesimport android.content.res.Resources;
2941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hinesimport android.graphics.Bitmap;
3041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hinesimport android.graphics.drawable.BitmapDrawable;
3141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hinesimport android.graphics.drawable.Drawable;
3241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hinesimport android.os.Handler;
3341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hinesimport android.os.Message;
3441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hinesimport android.util.AttributeSet;
3541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hinesimport android.util.Log;
3641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hinesimport android.view.Surface;
3741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hinesimport android.view.SurfaceHolder;
3841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hinesimport android.view.SurfaceView;
3941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hinesimport android.view.KeyEvent;
4041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hinesimport android.view.MotionEvent;
4141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines
4241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hinespublic class RSTestView extends RSSurfaceView {
4341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines
4441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines    private Context mCtx;
4541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines
4641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines    public RSTestView(Context context) {
4741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines        super(context);
4841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines        mCtx = context;
4941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines        //setFocusable(true);
5041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines    }
5141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines
5241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines    private RenderScriptGL mRS;
5341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines    private RSTestCore mRender;
5441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines
5541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
5641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines        super.surfaceChanged(holder, format, w, h);
5741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines        if (mRS == null) {
5841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines            RenderScriptGL.SurfaceConfig sc = new RenderScriptGL.SurfaceConfig();
5941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines            mRS = createRenderScriptGL(sc);
6041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines            mRS.setSurface(holder, w, h);
6141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines            mRender = new RSTestCore(mCtx);
6241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines            mRender.init(mRS, getResources(), w, h);
6341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines        }
6441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines    }
6541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines
6641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines    @Override
6741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines    protected void onDetachedFromWindow() {
6841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines        if(mRS != null) {
6941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines            mRender.cleanup();
7041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines            mRS = null;
7141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines            destroyRenderScriptGL();
7241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines        }
7341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines    }
7441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines
7541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines    @Override
7641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines    public boolean onKeyDown(int keyCode, KeyEvent event)
7741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines    {
7841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines        return super.onKeyDown(keyCode, event);
7941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines    }
8041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines
8141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines    @Override
8241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines    public boolean onTouchEvent(MotionEvent ev)
8341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines    {
8441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines        boolean ret = false;
8541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines        int act = ev.getAction();
8641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines        if (act == ev.ACTION_DOWN) {
8741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines            mRender.onActionDown((int)ev.getX(), (int)ev.getY());
8841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines            ret = true;
8941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines        }
9041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines        else if (act == ev.ACTION_MOVE) {
9141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines            mRender.onActionMove((int)ev.getX(), (int)ev.getY());
9241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines            ret = true;
9341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines        }
9441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines
9541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines        return ret;
9641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines    }
9741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines}
98