1e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams/* 2e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams * Copyright (C) 2011 The Android Open Source Project 3e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams * 4e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams * you may not use this file except in compliance with the License. 6e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams * You may obtain a copy of the License at 7e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams * 8e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams * http://www.apache.org/licenses/LICENSE-2.0 9e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams * 10e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams * Unless required by applicable law or agreed to in writing, software 11e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams * See the License for the specific language governing permissions and 14e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams * limitations under the License. 15e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams */ 16e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 17e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Samspackage com.example.android.rs.helloworld; 18e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 19e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Samsimport android.renderscript.RSSurfaceView; 20e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Samsimport android.renderscript.RenderScriptGL; 21e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 22e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Samsimport android.content.Context; 23e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Samsimport android.view.MotionEvent; 24e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 25e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Samspublic class HelloWorldView extends RSSurfaceView { 26e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams // Renderscipt context 27e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private RenderScriptGL mRS; 28e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams // Script that does the rendering 29e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private HelloWorldRS mRender; 30e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 31e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams public HelloWorldView(Context context) { 32e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams super(context); 33e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams ensureRenderScript(); 34e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams } 35e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 36e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private void ensureRenderScript() { 37e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams if (mRS == null) { 38e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams // Initialize renderscript with desired surface characteristics. 39e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams // In this case, just use the defaults 40e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams RenderScriptGL.SurfaceConfig sc = new RenderScriptGL.SurfaceConfig(); 41e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mRS = createRenderScriptGL(sc); 42e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams // Create an instance of the script that does the rendering 43e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mRender = new HelloWorldRS(); 44e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mRender.init(mRS, getResources()); 45e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams } 46e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams } 47e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 48e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams @Override 49e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams protected void onAttachedToWindow() { 50e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams super.onAttachedToWindow(); 51e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams ensureRenderScript(); 52e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams } 53e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 54e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams @Override 55e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams protected void onDetachedFromWindow() { 56e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams // Handle the system event and clean up 57e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mRender = null; 58e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams if (mRS != null) { 59e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mRS = null; 60e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams destroyRenderScriptGL(); 61e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams } 62e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams } 63e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 64e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams @Override 65e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams public boolean onTouchEvent(MotionEvent ev) { 66e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams // Pass touch events from the system to the rendering script 67e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams if (ev.getAction() == MotionEvent.ACTION_DOWN) { 68e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mRender.onActionDown((int)ev.getX(), (int)ev.getY()); 69e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams return true; 70e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams } 71e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 72e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams return false; 73e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams } 74e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams} 75e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 76e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 77