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