1704ff64b099406bb328898a7443921f22dbffd6dJason Sams/*
2704ff64b099406bb328898a7443921f22dbffd6dJason Sams * Copyright (C) 2008 The Android Open Source Project
3704ff64b099406bb328898a7443921f22dbffd6dJason Sams *
4704ff64b099406bb328898a7443921f22dbffd6dJason Sams * Licensed under the Apache License, Version 2.0 (the "License");
5704ff64b099406bb328898a7443921f22dbffd6dJason Sams * you may not use this file except in compliance with the License.
6704ff64b099406bb328898a7443921f22dbffd6dJason Sams * You may obtain a copy of the License at
7704ff64b099406bb328898a7443921f22dbffd6dJason Sams *
8704ff64b099406bb328898a7443921f22dbffd6dJason Sams *      http://www.apache.org/licenses/LICENSE-2.0
9704ff64b099406bb328898a7443921f22dbffd6dJason Sams *
10704ff64b099406bb328898a7443921f22dbffd6dJason Sams * Unless required by applicable law or agreed to in writing, software
11704ff64b099406bb328898a7443921f22dbffd6dJason Sams * distributed under the License is distributed on an "AS IS" BASIS,
12704ff64b099406bb328898a7443921f22dbffd6dJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13704ff64b099406bb328898a7443921f22dbffd6dJason Sams * See the License for the specific language governing permissions and
14704ff64b099406bb328898a7443921f22dbffd6dJason Sams * limitations under the License.
15704ff64b099406bb328898a7443921f22dbffd6dJason Sams */
16704ff64b099406bb328898a7443921f22dbffd6dJason Sams
17704ff64b099406bb328898a7443921f22dbffd6dJason Samspackage android.renderscript;
18704ff64b099406bb328898a7443921f22dbffd6dJason Sams
19704ff64b099406bb328898a7443921f22dbffd6dJason Samsimport java.lang.reflect.Field;
20704ff64b099406bb328898a7443921f22dbffd6dJason Sams
216b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liaoimport android.content.Context;
2211c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Samsimport android.graphics.PixelFormat;
23704ff64b099406bb328898a7443921f22dbffd6dJason Samsimport android.graphics.Bitmap;
24704ff64b099406bb328898a7443921f22dbffd6dJason Samsimport android.graphics.BitmapFactory;
25faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Samsimport android.graphics.SurfaceTexture;
26704ff64b099406bb328898a7443921f22dbffd6dJason Samsimport android.util.Log;
27704ff64b099406bb328898a7443921f22dbffd6dJason Samsimport android.view.Surface;
282222aa90031604e9752ebc2909303a84139b8b18Jason Samsimport android.view.SurfaceHolder;
292222aa90031604e9752ebc2909303a84139b8b18Jason Samsimport android.view.SurfaceView;
30704ff64b099406bb328898a7443921f22dbffd6dJason Sams
319c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines/**
32d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams * @deprecated in API 16
333aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * The Graphics derivitive of Renderscript.  Extends the basic context to add a
3427676fe24be7444a174c15df476e49adc5335d03Jason Sams * root script which is the display window for graphical output.  When the
3527676fe24be7444a174c15df476e49adc5335d03Jason Sams * system needs to update the display the currently bound root script will be
3627676fe24be7444a174c15df476e49adc5335d03Jason Sams * called.  This script is expected to issue the rendering commands to repaint
3727676fe24be7444a174c15df476e49adc5335d03Jason Sams * the screen.
383aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez *
393aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <div class="special reference">
403aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <h3>Developer Guides</h3>
413aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <p>For more information about creating an application that uses Renderscript, read the
423aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <a href="{@docRoot}guide/topics/graphics/renderscript.html">Renderscript</a> developer guide.</p>
433aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * </div>
44704ff64b099406bb328898a7443921f22dbffd6dJason Sams **/
45704ff64b099406bb328898a7443921f22dbffd6dJason Samspublic class RenderScriptGL extends RenderScript {
46704ff64b099406bb328898a7443921f22dbffd6dJason Sams    int mWidth;
47704ff64b099406bb328898a7443921f22dbffd6dJason Sams    int mHeight;
48704ff64b099406bb328898a7443921f22dbffd6dJason Sams
499c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
50d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
5127676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Class which is used to describe a pixel format for a graphical buffer.
5227676fe24be7444a174c15df476e49adc5335d03Jason Sams     * This is used to describe the intended format of the display surface.
5327676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
54bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * The configuration is described by pairs of minimum and preferred bit
55bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * depths for each component within the config and additional structural
56bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * information.
5727676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
582222aa90031604e9752ebc2909303a84139b8b18Jason Sams    public static class SurfaceConfig {
592222aa90031604e9752ebc2909303a84139b8b18Jason Sams        int mDepthMin       = 0;
602222aa90031604e9752ebc2909303a84139b8b18Jason Sams        int mDepthPref      = 0;
612222aa90031604e9752ebc2909303a84139b8b18Jason Sams        int mStencilMin     = 0;
622222aa90031604e9752ebc2909303a84139b8b18Jason Sams        int mStencilPref    = 0;
632222aa90031604e9752ebc2909303a84139b8b18Jason Sams        int mColorMin       = 8;
642222aa90031604e9752ebc2909303a84139b8b18Jason Sams        int mColorPref      = 8;
652222aa90031604e9752ebc2909303a84139b8b18Jason Sams        int mAlphaMin       = 0;
662222aa90031604e9752ebc2909303a84139b8b18Jason Sams        int mAlphaPref      = 0;
672222aa90031604e9752ebc2909303a84139b8b18Jason Sams        int mSamplesMin     = 1;
682222aa90031604e9752ebc2909303a84139b8b18Jason Sams        int mSamplesPref    = 1;
692222aa90031604e9752ebc2909303a84139b8b18Jason Sams        float mSamplesQ     = 1.f;
702222aa90031604e9752ebc2909303a84139b8b18Jason Sams
71d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams        /**
72d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         * @deprecated in API 16
73d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         */
742222aa90031604e9752ebc2909303a84139b8b18Jason Sams        public SurfaceConfig() {
752222aa90031604e9752ebc2909303a84139b8b18Jason Sams        }
762222aa90031604e9752ebc2909303a84139b8b18Jason Sams
77d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams        /**
78d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         * @deprecated in API 16
79d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         */
802222aa90031604e9752ebc2909303a84139b8b18Jason Sams        public SurfaceConfig(SurfaceConfig sc) {
812222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mDepthMin = sc.mDepthMin;
822222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mDepthPref = sc.mDepthPref;
832222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mStencilMin = sc.mStencilMin;
842222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mStencilPref = sc.mStencilPref;
852222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mColorMin = sc.mColorMin;
862222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mColorPref = sc.mColorPref;
872222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mAlphaMin = sc.mAlphaMin;
882222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mAlphaPref = sc.mAlphaPref;
892222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mSamplesMin = sc.mSamplesMin;
902222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mSamplesPref = sc.mSamplesPref;
912222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mSamplesQ = sc.mSamplesQ;
922222aa90031604e9752ebc2909303a84139b8b18Jason Sams        }
932222aa90031604e9752ebc2909303a84139b8b18Jason Sams
942222aa90031604e9752ebc2909303a84139b8b18Jason Sams        private void validateRange(int umin, int upref, int rmin, int rmax) {
952222aa90031604e9752ebc2909303a84139b8b18Jason Sams            if (umin < rmin || umin > rmax) {
96c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams                throw new RSIllegalArgumentException("Minimum value provided out of range.");
972222aa90031604e9752ebc2909303a84139b8b18Jason Sams            }
982222aa90031604e9752ebc2909303a84139b8b18Jason Sams            if (upref < umin) {
99bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams                throw new RSIllegalArgumentException("preferred must be >= Minimum.");
1002222aa90031604e9752ebc2909303a84139b8b18Jason Sams            }
1012222aa90031604e9752ebc2909303a84139b8b18Jason Sams        }
1022222aa90031604e9752ebc2909303a84139b8b18Jason Sams
1039c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines        /**
104d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         * @deprecated in API 16
105bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * Set the per-component bit depth for color (red, green, blue).  This
106bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * configures the surface for an unsigned integer buffer type.
107bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         *
108bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * @param minimum
109bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * @param preferred
110bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         */
111bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        public void setColor(int minimum, int preferred) {
112bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            validateRange(minimum, preferred, 5, 8);
1132222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mColorMin = minimum;
114bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            mColorPref = preferred;
1152222aa90031604e9752ebc2909303a84139b8b18Jason Sams        }
116bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams
1179c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines        /**
118d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         * @deprecated in API 16
119bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * Set the bit depth for alpha. This configures the surface for
120bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * an unsigned integer buffer type.
121bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         *
122bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * @param minimum
123bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * @param preferred
124bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         */
125bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        public void setAlpha(int minimum, int preferred) {
126bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            validateRange(minimum, preferred, 0, 8);
1272222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mAlphaMin = minimum;
128bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            mAlphaPref = preferred;
1292222aa90031604e9752ebc2909303a84139b8b18Jason Sams        }
130bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams
1319c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines         /**
132d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         * @deprecated in API 16
133bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * Set the bit depth for the depth buffer. This configures the
134bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * surface for an unsigned integer buffer type.  If a minimum of 0
135bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * is specified then its possible no depth buffer will be
136bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * allocated.
137bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         *
138bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * @param minimum
139bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * @param preferred
140bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         */
141bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        public void setDepth(int minimum, int preferred) {
142bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            validateRange(minimum, preferred, 0, 24);
1432222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mDepthMin = minimum;
144bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            mDepthPref = preferred;
1452222aa90031604e9752ebc2909303a84139b8b18Jason Sams        }
146bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams
1479c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines        /**
148d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         * @deprecated in API 16
149bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * Configure the multisample rendering.
150bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         *
151bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * @param minimum The required number of samples, must be at least 1.
152bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * @param preferred The targe number of samples, must be at least
153bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         *                  minimum
154bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * @param Q  The quality of samples, range 0-1.  Used to decide between
155bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         *           different formats which have the same number of samples but
156bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         *           different rendering quality.
157bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         */
158bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        public void setSamples(int minimum, int preferred, float Q) {
159bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            validateRange(minimum, preferred, 1, 32);
1602222aa90031604e9752ebc2909303a84139b8b18Jason Sams            if (Q < 0.0f || Q > 1.0f) {
161c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams                throw new RSIllegalArgumentException("Quality out of 0-1 range.");
1622222aa90031604e9752ebc2909303a84139b8b18Jason Sams            }
1632222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mSamplesMin = minimum;
164bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            mSamplesPref = preferred;
1652222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mSamplesQ = Q;
1662222aa90031604e9752ebc2909303a84139b8b18Jason Sams        }
1672222aa90031604e9752ebc2909303a84139b8b18Jason Sams    };
1682222aa90031604e9752ebc2909303a84139b8b18Jason Sams
1692222aa90031604e9752ebc2909303a84139b8b18Jason Sams    SurfaceConfig mSurfaceConfig;
1702222aa90031604e9752ebc2909303a84139b8b18Jason Sams
1719c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
172d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
173bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * Construct a new RenderScriptGL context.
174bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
1756b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao     * @param ctx The context.
1768cecbb5293f73e3f63f2601dda68016762c58a0cStephen Hines     * @param sc The desired format of the primary rendering surface.
177bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
1786b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao    public RenderScriptGL(Context ctx, SurfaceConfig sc) {
1796b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao        super(ctx);
1802222aa90031604e9752ebc2909303a84139b8b18Jason Sams        mSurfaceConfig = new SurfaceConfig(sc);
1812222aa90031604e9752ebc2909303a84139b8b18Jason Sams
1821a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams        int sdkVersion = ctx.getApplicationInfo().targetSdkVersion;
1834382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines
184704ff64b099406bb328898a7443921f22dbffd6dJason Sams        mWidth = 0;
185704ff64b099406bb328898a7443921f22dbffd6dJason Sams        mHeight = 0;
186704ff64b099406bb328898a7443921f22dbffd6dJason Sams        mDev = nDeviceCreate();
1872c74ad9aae29cc64fece926f353825a7925792c2Alex Sakhartchouk        int dpi = ctx.getResources().getDisplayMetrics().densityDpi;
1884382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines        mContext = nContextCreateGL(mDev, 0, sdkVersion,
18911c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                                    mSurfaceConfig.mColorMin, mSurfaceConfig.mColorPref,
19011c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                                    mSurfaceConfig.mAlphaMin, mSurfaceConfig.mAlphaPref,
19111c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                                    mSurfaceConfig.mDepthMin, mSurfaceConfig.mDepthPref,
19211c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                                    mSurfaceConfig.mStencilMin, mSurfaceConfig.mStencilPref,
19311c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                                    mSurfaceConfig.mSamplesMin, mSurfaceConfig.mSamplesPref,
1942c74ad9aae29cc64fece926f353825a7925792c2Alex Sakhartchouk                                    mSurfaceConfig.mSamplesQ, dpi);
195d5f06300341df0990be3e0b7a26fa49b13c6fc19Jason Sams        if (mContext == 0) {
196d5f06300341df0990be3e0b7a26fa49b13c6fc19Jason Sams            throw new RSDriverException("Failed to create RS context.");
197d5f06300341df0990be3e0b7a26fa49b13c6fc19Jason Sams        }
198704ff64b099406bb328898a7443921f22dbffd6dJason Sams        mMessageThread = new MessageThread(this);
199704ff64b099406bb328898a7443921f22dbffd6dJason Sams        mMessageThread.start();
200704ff64b099406bb328898a7443921f22dbffd6dJason Sams    }
201704ff64b099406bb328898a7443921f22dbffd6dJason Sams
2029c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
203d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
204bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * Bind an os surface
205bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
206bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
207bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @param w
208bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @param h
209bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @param sur
210bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
211bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void setSurface(SurfaceHolder sur, int w, int h) {
212bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        validate();
213faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams        Surface s = null;
214bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        if (sur != null) {
215faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams            s = sur.getSurface();
216bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        }
217704ff64b099406bb328898a7443921f22dbffd6dJason Sams        mWidth = w;
218704ff64b099406bb328898a7443921f22dbffd6dJason Sams        mHeight = h;
219faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams        nContextSetSurface(w, h, s);
220faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams    }
221faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams
2229c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
223e619de6a4e4326b7662b523ea2f403801291d432Jason Sams     * @deprecated in API 16
224faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams     * Bind an os surface
225faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams     *
226faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams     * @param w
227faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams     * @param h
228faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams     * @param sur
229faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams     */
230faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams    public void setSurfaceTexture(SurfaceTexture sur, int w, int h) {
231faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams        validate();
232faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams        //android.util.Log.v("rs", "set surface " + sur + " w=" + w + ", h=" + h);
233faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams
234faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams        mWidth = w;
235faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams        mHeight = h;
236faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams        nContextSetSurfaceTexture(w, h, sur);
237704ff64b099406bb328898a7443921f22dbffd6dJason Sams    }
238704ff64b099406bb328898a7443921f22dbffd6dJason Sams
2399c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
240d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
241bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * return the height of the last set surface.
242bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
243bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @return int
244bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
2455585e36a413dcc70a4bdd04063ea31db2519ea8dJason Sams    public int getHeight() {
2465585e36a413dcc70a4bdd04063ea31db2519ea8dJason Sams        return mHeight;
2475585e36a413dcc70a4bdd04063ea31db2519ea8dJason Sams    }
2485585e36a413dcc70a4bdd04063ea31db2519ea8dJason Sams
2499c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
250d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
251bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * return the width of the last set surface.
252bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
253bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @return int
254bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
2555585e36a413dcc70a4bdd04063ea31db2519ea8dJason Sams    public int getWidth() {
2565585e36a413dcc70a4bdd04063ea31db2519ea8dJason Sams        return mWidth;
2575585e36a413dcc70a4bdd04063ea31db2519ea8dJason Sams    }
258704ff64b099406bb328898a7443921f22dbffd6dJason Sams
2599c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
260d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
261bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * Temporarly halt calls to the root rendering script.
262bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
263bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
264bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void pause() {
265704ff64b099406bb328898a7443921f22dbffd6dJason Sams        validate();
266704ff64b099406bb328898a7443921f22dbffd6dJason Sams        nContextPause();
267704ff64b099406bb328898a7443921f22dbffd6dJason Sams    }
268704ff64b099406bb328898a7443921f22dbffd6dJason Sams
2699c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
270d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
271bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * Resume calls to the root rendering script.
272bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
273bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
274bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void resume() {
275704ff64b099406bb328898a7443921f22dbffd6dJason Sams        validate();
276704ff64b099406bb328898a7443921f22dbffd6dJason Sams        nContextResume();
277704ff64b099406bb328898a7443921f22dbffd6dJason Sams    }
278704ff64b099406bb328898a7443921f22dbffd6dJason Sams
279704ff64b099406bb328898a7443921f22dbffd6dJason Sams
2809c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
281d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
282bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * Set the script to handle calls to render the primary surface.
283bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
284bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @param s Graphics script to process rendering requests.
285bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
286bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void bindRootScript(Script s) {
287704ff64b099406bb328898a7443921f22dbffd6dJason Sams        validate();
288704ff64b099406bb328898a7443921f22dbffd6dJason Sams        nContextBindRootScript(safeID(s));
289704ff64b099406bb328898a7443921f22dbffd6dJason Sams    }
290704ff64b099406bb328898a7443921f22dbffd6dJason Sams
2919c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
292d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
293bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * Set the default ProgramStore object seen as the parent state by the root
294bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * rendering script.
295bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
296bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @param p
297bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
298bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void bindProgramStore(ProgramStore p) {
299704ff64b099406bb328898a7443921f22dbffd6dJason Sams        validate();
30054db59c3594e887a412a24713fc3daa1c2404593Jason Sams        nContextBindProgramStore(safeID(p));
301704ff64b099406bb328898a7443921f22dbffd6dJason Sams    }
302704ff64b099406bb328898a7443921f22dbffd6dJason Sams
3039c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
304d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
305bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * Set the default ProgramFragment object seen as the parent state by the
306bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * root rendering script.
307bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
308bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @param p
309bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
310bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void bindProgramFragment(ProgramFragment p) {
311704ff64b099406bb328898a7443921f22dbffd6dJason Sams        validate();
312704ff64b099406bb328898a7443921f22dbffd6dJason Sams        nContextBindProgramFragment(safeID(p));
313704ff64b099406bb328898a7443921f22dbffd6dJason Sams    }
314704ff64b099406bb328898a7443921f22dbffd6dJason Sams
3159c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
316d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
317bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * Set the default ProgramRaster object seen as the parent state by the
318bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * root rendering script.
319bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
320bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @param p
321bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
322bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void bindProgramRaster(ProgramRaster p) {
323704ff64b099406bb328898a7443921f22dbffd6dJason Sams        validate();
324704ff64b099406bb328898a7443921f22dbffd6dJason Sams        nContextBindProgramRaster(safeID(p));
325704ff64b099406bb328898a7443921f22dbffd6dJason Sams    }
326704ff64b099406bb328898a7443921f22dbffd6dJason Sams
3279c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
328d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
329bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * Set the default ProgramVertex object seen as the parent state by the
330bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * root rendering script.
331bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
332bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @param p
333bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
334bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void bindProgramVertex(ProgramVertex p) {
335704ff64b099406bb328898a7443921f22dbffd6dJason Sams        validate();
336704ff64b099406bb328898a7443921f22dbffd6dJason Sams        nContextBindProgramVertex(safeID(p));
337704ff64b099406bb328898a7443921f22dbffd6dJason Sams    }
338704ff64b099406bb328898a7443921f22dbffd6dJason Sams
339704ff64b099406bb328898a7443921f22dbffd6dJason Sams}
340