1e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams/*
2e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams * Copyright (C) 2008 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.miscsamples;
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 Samsimport android.view.SurfaceHolder;
25e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams
26e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Samspublic class RsRenderStatesView extends RSSurfaceView {
27e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams
28e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams    public RsRenderStatesView(Context context) {
29e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams        super(context);
30e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams        ensureRenderScript();
31e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams    }
32e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams
33e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams    private RenderScriptGL mRS;
34e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams    private RsRenderStatesRS mRender;
35e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams
36e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams    private void ensureRenderScript() {
37e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams        if (mRS == null) {
38e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams            RenderScriptGL.SurfaceConfig sc = new RenderScriptGL.SurfaceConfig();
39e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams            sc.setDepth(16, 24);
40e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams            mRS = createRenderScriptGL(sc);
41e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams            mRender = new RsRenderStatesRS();
42e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams            mRender.init(mRS, getResources());
43e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams        }
44e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams    }
45e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams
46e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams    @Override
47e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams    protected void onAttachedToWindow() {
48e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams        super.onAttachedToWindow();
49e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams        ensureRenderScript();
50e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams    }
51e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams
52e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams    @Override
53e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
54e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams        super.surfaceChanged(holder, format, w, h);
55e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams        mRender.surfaceChanged();
56e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams    }
57e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams
58e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams    @Override
59e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams    protected void onDetachedFromWindow() {
60e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams        mRender = null;
61e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams        if (mRS != null) {
62e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams            mRS = null;
63e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams            destroyRenderScriptGL();
64e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams        }
65e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams    }
66e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams
67e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams    @Override
68e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams    public boolean onTouchEvent(MotionEvent ev) {
69e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams        if (ev.getAction() == MotionEvent.ACTION_DOWN) {
70e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams            mRender.onActionDown((int)ev.getX(), (int)ev.getY());
71e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams            return true;
72e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams        }
73e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams
74e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams        return false;
75e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams    }
76e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams}
77e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams
78e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams
79