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