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