1094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea/*
2094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea * Copyright (C) 2012 The Android Open Source Project
3094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea *
4094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea * Licensed under the Apache License, Version 2.0 (the "License");
5094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea * you may not use this file except in compliance with the License.
6094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea * You may obtain a copy of the License at
7094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea *
8094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea *      http://www.apache.org/licenses/LICENSE-2.0
9094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea *
10094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea * Unless required by applicable law or agreed to in writing, software
11094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea * distributed under the License is distributed on an "AS IS" BASIS,
12094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea * See the License for the specific language governing permissions and
14094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea * limitations under the License.
15094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea */
16094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea
17094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Maleapackage %PACKAGE%;
18094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea
19094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Maleaimport android.renderscript.RSSurfaceView;
20094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Maleaimport android.renderscript.RenderScriptGL;
21094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea
22094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Maleaimport android.content.Context;
23094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Maleaimport android.view.MotionEvent;
24094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea
25094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Maleapublic class DriverView extends RSSurfaceView {
26094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea    // Renderscipt context
27094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea    private RenderScriptGL mRS;
28094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea    // Script that does the rendering
29094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea    private DriverRS mRender;
30094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea
31094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea    public DriverView(Context context) {
32094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea        super(context);
33094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea        ensureRenderScript();
34094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea    }
35094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea
36094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea    private void ensureRenderScript() {
37094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea        if (mRS == null) {
38094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea            // Initialize renderscript with desired surface characteristics.
39094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea            // In this case, just use the defaults
40094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea            RenderScriptGL.SurfaceConfig sc = new RenderScriptGL.SurfaceConfig();
41094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea            mRS = createRenderScriptGL(sc);
42094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea            // Create an instance of the script that does the rendering
43094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea            mRender = new DriverRS();
44094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea            mRender.init(mRS, getResources());
45094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea        }
46094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea    }
47094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea
48094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea    @Override
49094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea    protected void onAttachedToWindow() {
50094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea        super.onAttachedToWindow();
51094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea        ensureRenderScript();
52094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea    }
53094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea
54094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea    @Override
55094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea    protected void onDetachedFromWindow() {
56094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea        // Handle the system event and clean up
57094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea        mRender = null;
58094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea        if (mRS != null) {
59094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea            mRS = null;
60094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea            destroyRenderScriptGL();
61094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea        }
62094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea    }
63094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea}
64094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea
65094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea
66