160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich/*
2e619de6a4e4326b7662b523ea2f403801291d432Jason Sams * Copyright (C) 2008-2012 The Android Open Source Project
360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich *
460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * Licensed under the Apache License, Version 2.0 (the "License");
560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * you may not use this file except in compliance with the License.
660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * You may obtain a copy of the License at
760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich *
860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich *      http://www.apache.org/licenses/LICENSE-2.0
960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich *
1060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * Unless required by applicable law or agreed to in writing, software
1160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * distributed under the License is distributed on an "AS IS" BASIS,
1260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * See the License for the specific language governing permissions and
1460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * limitations under the License.
1560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich */
1660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
1794d8e90ad78ee1dbc0efa315117688abd126ae55Jason Samspackage android.renderscript;
1860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
1960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevichimport android.content.Context;
2060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevichimport android.util.AttributeSet;
2160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevichimport android.view.SurfaceHolder;
2260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevichimport android.view.SurfaceView;
2360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
249c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines/**
25a90842283e322b1210e2bea5850b05177e3d87afTim Murray * @hide
26e619de6a4e4326b7662b523ea2f403801291d432Jason Sams * @deprecated in API 16
2793c47f10285df8311601fa94ab3c627b0d0cd4beAlex Sakhartchouk * The Surface View for a graphics renderscript (RenderScriptGL) to draw on.
283aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez *
293aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <div class="special reference">
303aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <h3>Developer Guides</h3>
31c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * <p>For more information about creating an application that uses RenderScript, read the
32c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * <a href="{@docRoot}guide/topics/renderscript/index.html">RenderScript</a> developer guide.</p>
333aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * </div>
34b11e3d2b0edb03a5e3ea535d58b0cbe2d920ed16Stephen Hines */
3560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevichpublic class RSSurfaceView extends SurfaceView implements SurfaceHolder.Callback {
3660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    private SurfaceHolder mSurfaceHolder;
37704ff64b099406bb328898a7443921f22dbffd6dJason Sams    private RenderScriptGL mRS;
3860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
399c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
40e619de6a4e4326b7662b523ea2f403801291d432Jason Sams     * @deprecated in API 16
4160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich     * Standard View constructor. In order to render something, you
42b11e3d2b0edb03a5e3ea535d58b0cbe2d920ed16Stephen Hines     * must call {@link android.opengl.GLSurfaceView#setRenderer} to
43b11e3d2b0edb03a5e3ea535d58b0cbe2d920ed16Stephen Hines     * register a renderer.
4460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich     */
4560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public RSSurfaceView(Context context) {
4660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        super(context);
4760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        init();
4866b2771d745aa66df5cf80b300b5ba0f936ff22eJason Sams        //Log.v(RenderScript.LOG_TAG, "RSSurfaceView");
4960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
5060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
519c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
52e619de6a4e4326b7662b523ea2f403801291d432Jason Sams     * @deprecated in API 16
5360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich     * Standard View constructor. In order to render something, you
54b11e3d2b0edb03a5e3ea535d58b0cbe2d920ed16Stephen Hines     * must call {@link android.opengl.GLSurfaceView#setRenderer} to
55b11e3d2b0edb03a5e3ea535d58b0cbe2d920ed16Stephen Hines     * register a renderer.
5660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich     */
5760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public RSSurfaceView(Context context, AttributeSet attrs) {
5860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        super(context, attrs);
5960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        init();
6066b2771d745aa66df5cf80b300b5ba0f936ff22eJason Sams        //Log.v(RenderScript.LOG_TAG, "RSSurfaceView");
6160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
6260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
6360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    private void init() {
6460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        // Install a SurfaceHolder.Callback so we get notified when the
6560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        // underlying surface is created and destroyed
6660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        SurfaceHolder holder = getHolder();
6760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        holder.addCallback(this);
6860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
6960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
709c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
71e619de6a4e4326b7662b523ea2f403801291d432Jason Sams     * @deprecated in API 16
7260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich     * This method is part of the SurfaceHolder.Callback interface, and is
7360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich     * not normally called or subclassed by clients of RSSurfaceView.
7460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich     */
7560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void surfaceCreated(SurfaceHolder holder) {
7660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        mSurfaceHolder = holder;
7760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
7860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
799c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
80e619de6a4e4326b7662b523ea2f403801291d432Jason Sams     * @deprecated in API 16
8160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich     * This method is part of the SurfaceHolder.Callback interface, and is
8260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich     * not normally called or subclassed by clients of RSSurfaceView.
8360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich     */
8438da5086a65e8065e85bbca3638da752dba1dbe7Alex Sakhartchouk    public void surfaceDestroyed(SurfaceHolder holder) {
8538da5086a65e8065e85bbca3638da752dba1dbe7Alex Sakhartchouk        synchronized (this) {
8638da5086a65e8065e85bbca3638da752dba1dbe7Alex Sakhartchouk            // Surface will be destroyed when we return
8738da5086a65e8065e85bbca3638da752dba1dbe7Alex Sakhartchouk            if (mRS != null) {
8838da5086a65e8065e85bbca3638da752dba1dbe7Alex Sakhartchouk                mRS.setSurface(null, 0, 0);
8938da5086a65e8065e85bbca3638da752dba1dbe7Alex Sakhartchouk            }
90efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams        }
9160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
9260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
939c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
94e619de6a4e4326b7662b523ea2f403801291d432Jason Sams     * @deprecated in API 16
9560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich     * This method is part of the SurfaceHolder.Callback interface, and is
9660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich     * not normally called or subclassed by clients of RSSurfaceView.
9760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich     */
9838da5086a65e8065e85bbca3638da752dba1dbe7Alex Sakhartchouk    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
9938da5086a65e8065e85bbca3638da752dba1dbe7Alex Sakhartchouk        synchronized (this) {
10038da5086a65e8065e85bbca3638da752dba1dbe7Alex Sakhartchouk            if (mRS != null) {
10138da5086a65e8065e85bbca3638da752dba1dbe7Alex Sakhartchouk                mRS.setSurface(holder, w, h);
10238da5086a65e8065e85bbca3638da752dba1dbe7Alex Sakhartchouk            }
103efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams        }
10460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
10560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
1069c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines   /**
107e619de6a4e4326b7662b523ea2f403801291d432Jason Sams     * @deprecated in API 16
10860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich     * Inform the view that the activity is paused. The owner of this view must
10960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich     * call this method when the activity is paused. Calling this method will
11060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich     * pause the rendering thread.
11160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich     * Must not be called before a renderer has been set.
11260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich     */
113bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void pause() {
11465e7aa56f56097418d617663683544c25b3988eaJason Sams        if(mRS != null) {
11565e7aa56f56097418d617663683544c25b3988eaJason Sams            mRS.pause();
11665e7aa56f56097418d617663683544c25b3988eaJason Sams        }
11760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
11860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
1199c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
120e619de6a4e4326b7662b523ea2f403801291d432Jason Sams     * @deprecated in API 16
12160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich     * Inform the view that the activity is resumed. The owner of this view must
12260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich     * call this method when the activity is resumed. Calling this method will
12360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich     * recreate the OpenGL display and resume the rendering
12460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich     * thread.
12560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich     * Must not be called before a renderer has been set.
12660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich     */
127bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void resume() {
12865e7aa56f56097418d617663683544c25b3988eaJason Sams        if(mRS != null) {
12965e7aa56f56097418d617663683544c25b3988eaJason Sams            mRS.resume();
13065e7aa56f56097418d617663683544c25b3988eaJason Sams        }
13160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
13260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
133e619de6a4e4326b7662b523ea2f403801291d432Jason Sams    /**
134e619de6a4e4326b7662b523ea2f403801291d432Jason Sams     * @deprecated in API 16
135e619de6a4e4326b7662b523ea2f403801291d432Jason Sams     **/
136bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public RenderScriptGL createRenderScriptGL(RenderScriptGL.SurfaceConfig sc) {
1376b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao      RenderScriptGL rs = new RenderScriptGL(this.getContext(), sc);
138bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        setRenderScriptGL(rs);
139bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        return rs;
14060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
14160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
142e619de6a4e4326b7662b523ea2f403801291d432Jason Sams    /**
143e619de6a4e4326b7662b523ea2f403801291d432Jason Sams     * @deprecated in API 16
144e619de6a4e4326b7662b523ea2f403801291d432Jason Sams     **/
14538da5086a65e8065e85bbca3638da752dba1dbe7Alex Sakhartchouk    public void destroyRenderScriptGL() {
14638da5086a65e8065e85bbca3638da752dba1dbe7Alex Sakhartchouk        synchronized (this) {
14738da5086a65e8065e85bbca3638da752dba1dbe7Alex Sakhartchouk            mRS.destroy();
14838da5086a65e8065e85bbca3638da752dba1dbe7Alex Sakhartchouk            mRS = null;
14938da5086a65e8065e85bbca3638da752dba1dbe7Alex Sakhartchouk        }
1505fda65f182231b0e9ad61b1a6803c7603e29344fJoe Onorato    }
1512222aa90031604e9752ebc2909303a84139b8b18Jason Sams
152e619de6a4e4326b7662b523ea2f403801291d432Jason Sams    /**
153e619de6a4e4326b7662b523ea2f403801291d432Jason Sams     * @deprecated in API 16
154e619de6a4e4326b7662b523ea2f403801291d432Jason Sams     **/
155bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void setRenderScriptGL(RenderScriptGL rs) {
156a8551b1efa89841c01d3b6a01ac65e57084a3234Romain Guy        mRS = rs;
157a8551b1efa89841c01d3b6a01ac65e57084a3234Romain Guy    }
158bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams
159e619de6a4e4326b7662b523ea2f403801291d432Jason Sams    /**
160e619de6a4e4326b7662b523ea2f403801291d432Jason Sams     * @deprecated in API 16
161e619de6a4e4326b7662b523ea2f403801291d432Jason Sams     **/
162bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public RenderScriptGL getRenderScriptGL() {
163bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        return mRS;
164bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    }
16560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich}
166