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
196b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liaoimport android.content.Context;
20faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Samsimport android.graphics.SurfaceTexture;
21704ff64b099406bb328898a7443921f22dbffd6dJason Samsimport android.view.Surface;
222222aa90031604e9752ebc2909303a84139b8b18Jason Samsimport android.view.SurfaceHolder;
23704ff64b099406bb328898a7443921f22dbffd6dJason Sams
249c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines/**
25a90842283e322b1210e2bea5850b05177e3d87afTim Murray * @hide
26d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams * @deprecated in API 16
27c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * The Graphics derivitive of RenderScript.  Extends the basic context to add a
2827676fe24be7444a174c15df476e49adc5335d03Jason Sams * root script which is the display window for graphical output.  When the
2927676fe24be7444a174c15df476e49adc5335d03Jason Sams * system needs to update the display the currently bound root script will be
3027676fe24be7444a174c15df476e49adc5335d03Jason Sams * called.  This script is expected to issue the rendering commands to repaint
3127676fe24be7444a174c15df476e49adc5335d03Jason Sams * the screen.
323aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez *
333aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <div class="special reference">
343aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <h3>Developer Guides</h3>
35c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * <p>For more information about creating an application that uses RenderScript, read the
36c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * <a href="{@docRoot}guide/topics/renderscript/index.html">RenderScript</a> developer guide.</p>
373aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * </div>
38704ff64b099406bb328898a7443921f22dbffd6dJason Sams **/
39704ff64b099406bb328898a7443921f22dbffd6dJason Samspublic class RenderScriptGL extends RenderScript {
40704ff64b099406bb328898a7443921f22dbffd6dJason Sams    int mWidth;
41704ff64b099406bb328898a7443921f22dbffd6dJason Sams    int mHeight;
42704ff64b099406bb328898a7443921f22dbffd6dJason Sams
439c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
44d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
4527676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Class which is used to describe a pixel format for a graphical buffer.
4627676fe24be7444a174c15df476e49adc5335d03Jason Sams     * This is used to describe the intended format of the display surface.
4727676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
48bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * The configuration is described by pairs of minimum and preferred bit
49bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * depths for each component within the config and additional structural
50bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * information.
5127676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
522222aa90031604e9752ebc2909303a84139b8b18Jason Sams    public static class SurfaceConfig {
532222aa90031604e9752ebc2909303a84139b8b18Jason Sams        int mDepthMin       = 0;
542222aa90031604e9752ebc2909303a84139b8b18Jason Sams        int mDepthPref      = 0;
552222aa90031604e9752ebc2909303a84139b8b18Jason Sams        int mStencilMin     = 0;
562222aa90031604e9752ebc2909303a84139b8b18Jason Sams        int mStencilPref    = 0;
572222aa90031604e9752ebc2909303a84139b8b18Jason Sams        int mColorMin       = 8;
582222aa90031604e9752ebc2909303a84139b8b18Jason Sams        int mColorPref      = 8;
592222aa90031604e9752ebc2909303a84139b8b18Jason Sams        int mAlphaMin       = 0;
602222aa90031604e9752ebc2909303a84139b8b18Jason Sams        int mAlphaPref      = 0;
612222aa90031604e9752ebc2909303a84139b8b18Jason Sams        int mSamplesMin     = 1;
622222aa90031604e9752ebc2909303a84139b8b18Jason Sams        int mSamplesPref    = 1;
632222aa90031604e9752ebc2909303a84139b8b18Jason Sams        float mSamplesQ     = 1.f;
642222aa90031604e9752ebc2909303a84139b8b18Jason Sams
65d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams        /**
66d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         * @deprecated in API 16
67d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         */
682222aa90031604e9752ebc2909303a84139b8b18Jason Sams        public SurfaceConfig() {
692222aa90031604e9752ebc2909303a84139b8b18Jason Sams        }
702222aa90031604e9752ebc2909303a84139b8b18Jason Sams
71d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams        /**
72d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         * @deprecated in API 16
73d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         */
742222aa90031604e9752ebc2909303a84139b8b18Jason Sams        public SurfaceConfig(SurfaceConfig sc) {
752222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mDepthMin = sc.mDepthMin;
762222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mDepthPref = sc.mDepthPref;
772222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mStencilMin = sc.mStencilMin;
782222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mStencilPref = sc.mStencilPref;
792222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mColorMin = sc.mColorMin;
802222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mColorPref = sc.mColorPref;
812222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mAlphaMin = sc.mAlphaMin;
822222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mAlphaPref = sc.mAlphaPref;
832222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mSamplesMin = sc.mSamplesMin;
842222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mSamplesPref = sc.mSamplesPref;
852222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mSamplesQ = sc.mSamplesQ;
862222aa90031604e9752ebc2909303a84139b8b18Jason Sams        }
872222aa90031604e9752ebc2909303a84139b8b18Jason Sams
882222aa90031604e9752ebc2909303a84139b8b18Jason Sams        private void validateRange(int umin, int upref, int rmin, int rmax) {
892222aa90031604e9752ebc2909303a84139b8b18Jason Sams            if (umin < rmin || umin > rmax) {
90c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams                throw new RSIllegalArgumentException("Minimum value provided out of range.");
912222aa90031604e9752ebc2909303a84139b8b18Jason Sams            }
922222aa90031604e9752ebc2909303a84139b8b18Jason Sams            if (upref < umin) {
93bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams                throw new RSIllegalArgumentException("preferred must be >= Minimum.");
942222aa90031604e9752ebc2909303a84139b8b18Jason Sams            }
952222aa90031604e9752ebc2909303a84139b8b18Jason Sams        }
962222aa90031604e9752ebc2909303a84139b8b18Jason Sams
979c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines        /**
98d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         * @deprecated in API 16
99bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * Set the per-component bit depth for color (red, green, blue).  This
100bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * configures the surface for an unsigned integer buffer type.
101bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         *
102bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * @param minimum
103bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * @param preferred
104bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         */
105bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        public void setColor(int minimum, int preferred) {
106bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            validateRange(minimum, preferred, 5, 8);
1072222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mColorMin = minimum;
108bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            mColorPref = preferred;
1092222aa90031604e9752ebc2909303a84139b8b18Jason Sams        }
110bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams
1119c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines        /**
112d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         * @deprecated in API 16
113bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * Set the bit depth for alpha. This configures the surface for
114bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * an unsigned integer buffer type.
115bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         *
116bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * @param minimum
117bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * @param preferred
118bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         */
119bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        public void setAlpha(int minimum, int preferred) {
120bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            validateRange(minimum, preferred, 0, 8);
1212222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mAlphaMin = minimum;
122bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            mAlphaPref = preferred;
1232222aa90031604e9752ebc2909303a84139b8b18Jason Sams        }
124bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams
1259c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines         /**
126d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         * @deprecated in API 16
127bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * Set the bit depth for the depth buffer. This configures the
128bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * surface for an unsigned integer buffer type.  If a minimum of 0
129bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * is specified then its possible no depth buffer will be
130bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * allocated.
131bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         *
132bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * @param minimum
133bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * @param preferred
134bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         */
135bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        public void setDepth(int minimum, int preferred) {
136bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            validateRange(minimum, preferred, 0, 24);
1372222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mDepthMin = minimum;
138bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            mDepthPref = preferred;
1392222aa90031604e9752ebc2909303a84139b8b18Jason Sams        }
140bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams
1419c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines        /**
142d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         * @deprecated in API 16
143bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * Configure the multisample rendering.
144bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         *
145bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * @param minimum The required number of samples, must be at least 1.
146bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * @param preferred The targe number of samples, must be at least
147bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         *                  minimum
148bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * @param Q  The quality of samples, range 0-1.  Used to decide between
149bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         *           different formats which have the same number of samples but
150bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         *           different rendering quality.
151bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         */
152bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        public void setSamples(int minimum, int preferred, float Q) {
153bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            validateRange(minimum, preferred, 1, 32);
1542222aa90031604e9752ebc2909303a84139b8b18Jason Sams            if (Q < 0.0f || Q > 1.0f) {
155c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams                throw new RSIllegalArgumentException("Quality out of 0-1 range.");
1562222aa90031604e9752ebc2909303a84139b8b18Jason Sams            }
1572222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mSamplesMin = minimum;
158bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            mSamplesPref = preferred;
1592222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mSamplesQ = Q;
1602222aa90031604e9752ebc2909303a84139b8b18Jason Sams        }
1612222aa90031604e9752ebc2909303a84139b8b18Jason Sams    };
1622222aa90031604e9752ebc2909303a84139b8b18Jason Sams
1632222aa90031604e9752ebc2909303a84139b8b18Jason Sams    SurfaceConfig mSurfaceConfig;
1642222aa90031604e9752ebc2909303a84139b8b18Jason Sams
1659c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
166d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
167bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * Construct a new RenderScriptGL context.
168bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
1696b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao     * @param ctx The context.
1708cecbb5293f73e3f63f2601dda68016762c58a0cStephen Hines     * @param sc The desired format of the primary rendering surface.
171bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
1726b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao    public RenderScriptGL(Context ctx, SurfaceConfig sc) {
1736b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao        super(ctx);
1742222aa90031604e9752ebc2909303a84139b8b18Jason Sams        mSurfaceConfig = new SurfaceConfig(sc);
1752222aa90031604e9752ebc2909303a84139b8b18Jason Sams
1761a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams        int sdkVersion = ctx.getApplicationInfo().targetSdkVersion;
1774382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines
178704ff64b099406bb328898a7443921f22dbffd6dJason Sams        mWidth = 0;
179704ff64b099406bb328898a7443921f22dbffd6dJason Sams        mHeight = 0;
180704ff64b099406bb328898a7443921f22dbffd6dJason Sams        mDev = nDeviceCreate();
1812c74ad9aae29cc64fece926f353825a7925792c2Alex Sakhartchouk        int dpi = ctx.getResources().getDisplayMetrics().densityDpi;
1824382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines        mContext = nContextCreateGL(mDev, 0, sdkVersion,
18311c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                                    mSurfaceConfig.mColorMin, mSurfaceConfig.mColorPref,
18411c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                                    mSurfaceConfig.mAlphaMin, mSurfaceConfig.mAlphaPref,
18511c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                                    mSurfaceConfig.mDepthMin, mSurfaceConfig.mDepthPref,
18611c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                                    mSurfaceConfig.mStencilMin, mSurfaceConfig.mStencilPref,
18711c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                                    mSurfaceConfig.mSamplesMin, mSurfaceConfig.mSamplesPref,
1882c74ad9aae29cc64fece926f353825a7925792c2Alex Sakhartchouk                                    mSurfaceConfig.mSamplesQ, dpi);
189d5f06300341df0990be3e0b7a26fa49b13c6fc19Jason Sams        if (mContext == 0) {
190d5f06300341df0990be3e0b7a26fa49b13c6fc19Jason Sams            throw new RSDriverException("Failed to create RS context.");
191d5f06300341df0990be3e0b7a26fa49b13c6fc19Jason Sams        }
192704ff64b099406bb328898a7443921f22dbffd6dJason Sams        mMessageThread = new MessageThread(this);
193704ff64b099406bb328898a7443921f22dbffd6dJason Sams        mMessageThread.start();
194704ff64b099406bb328898a7443921f22dbffd6dJason Sams    }
195704ff64b099406bb328898a7443921f22dbffd6dJason Sams
1969c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
197d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
198bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * Bind an os surface
199bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
200bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
201bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @param w
202bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @param h
203bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @param sur
204bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
205bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void setSurface(SurfaceHolder sur, int w, int h) {
206bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        validate();
207faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams        Surface s = null;
208bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        if (sur != null) {
209faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams            s = sur.getSurface();
210bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        }
211704ff64b099406bb328898a7443921f22dbffd6dJason Sams        mWidth = w;
212704ff64b099406bb328898a7443921f22dbffd6dJason Sams        mHeight = h;
213faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams        nContextSetSurface(w, h, s);
214faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams    }
215faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams
2169c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
217e619de6a4e4326b7662b523ea2f403801291d432Jason Sams     * @deprecated in API 16
218faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams     * Bind an os surface
219faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams     *
220faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams     * @param w
221faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams     * @param h
222faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams     * @param sur
223faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams     */
224faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams    public void setSurfaceTexture(SurfaceTexture sur, int w, int h) {
225faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams        validate();
226faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams        //android.util.Log.v("rs", "set surface " + sur + " w=" + w + ", h=" + h);
227faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams
22821e0af987d7baccd5417a2f744d2dd706d85604eXiaofei Wan        Surface s = null;
22921e0af987d7baccd5417a2f744d2dd706d85604eXiaofei Wan        if (sur != null) {
23021e0af987d7baccd5417a2f744d2dd706d85604eXiaofei Wan            s = new Surface(sur);
23121e0af987d7baccd5417a2f744d2dd706d85604eXiaofei Wan        }
232faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams        mWidth = w;
233faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams        mHeight = h;
23421e0af987d7baccd5417a2f744d2dd706d85604eXiaofei Wan        nContextSetSurface(w, h, s);
235704ff64b099406bb328898a7443921f22dbffd6dJason Sams    }
236704ff64b099406bb328898a7443921f22dbffd6dJason Sams
2379c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
238d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
239bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * return the height of the last set surface.
240bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
241bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @return int
242bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
2435585e36a413dcc70a4bdd04063ea31db2519ea8dJason Sams    public int getHeight() {
2445585e36a413dcc70a4bdd04063ea31db2519ea8dJason Sams        return mHeight;
2455585e36a413dcc70a4bdd04063ea31db2519ea8dJason Sams    }
2465585e36a413dcc70a4bdd04063ea31db2519ea8dJason Sams
2479c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
248d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
249bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * return the width of the last set surface.
250bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
251bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @return int
252bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
2535585e36a413dcc70a4bdd04063ea31db2519ea8dJason Sams    public int getWidth() {
2545585e36a413dcc70a4bdd04063ea31db2519ea8dJason Sams        return mWidth;
2555585e36a413dcc70a4bdd04063ea31db2519ea8dJason Sams    }
256704ff64b099406bb328898a7443921f22dbffd6dJason Sams
2579c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
258d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
259bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * Temporarly halt calls to the root rendering script.
260bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
261bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
262bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void pause() {
263704ff64b099406bb328898a7443921f22dbffd6dJason Sams        validate();
264704ff64b099406bb328898a7443921f22dbffd6dJason Sams        nContextPause();
265704ff64b099406bb328898a7443921f22dbffd6dJason Sams    }
266704ff64b099406bb328898a7443921f22dbffd6dJason Sams
2679c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
268d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
269bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * Resume calls to the root rendering script.
270bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
271bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
272bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void resume() {
273704ff64b099406bb328898a7443921f22dbffd6dJason Sams        validate();
274704ff64b099406bb328898a7443921f22dbffd6dJason Sams        nContextResume();
275704ff64b099406bb328898a7443921f22dbffd6dJason Sams    }
276704ff64b099406bb328898a7443921f22dbffd6dJason Sams
277704ff64b099406bb328898a7443921f22dbffd6dJason Sams
2789c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
279d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
280bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * Set the script to handle calls to render the primary surface.
281bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
282bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @param s Graphics script to process rendering requests.
283bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
284bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void bindRootScript(Script s) {
285704ff64b099406bb328898a7443921f22dbffd6dJason Sams        validate();
286460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray        nContextBindRootScript((int)safeID(s));
287704ff64b099406bb328898a7443921f22dbffd6dJason Sams    }
288704ff64b099406bb328898a7443921f22dbffd6dJason Sams
2899c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
290d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
291bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * Set the default ProgramStore object seen as the parent state by the root
292bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * rendering script.
293bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
294bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @param p
295bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
296bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void bindProgramStore(ProgramStore p) {
297704ff64b099406bb328898a7443921f22dbffd6dJason Sams        validate();
298460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray        nContextBindProgramStore((int)safeID(p));
299704ff64b099406bb328898a7443921f22dbffd6dJason Sams    }
300704ff64b099406bb328898a7443921f22dbffd6dJason Sams
3019c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
302d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
303bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * Set the default ProgramFragment object seen as the parent state by the
304bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * root rendering script.
305bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
306bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @param p
307bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
308bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void bindProgramFragment(ProgramFragment p) {
309704ff64b099406bb328898a7443921f22dbffd6dJason Sams        validate();
310460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray        nContextBindProgramFragment((int)safeID(p));
311704ff64b099406bb328898a7443921f22dbffd6dJason Sams    }
312704ff64b099406bb328898a7443921f22dbffd6dJason Sams
3139c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
314d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
315bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * Set the default ProgramRaster object seen as the parent state by the
316bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * root rendering script.
317bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
318bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @param p
319bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
320bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void bindProgramRaster(ProgramRaster p) {
321704ff64b099406bb328898a7443921f22dbffd6dJason Sams        validate();
322460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray        nContextBindProgramRaster((int)safeID(p));
323704ff64b099406bb328898a7443921f22dbffd6dJason Sams    }
324704ff64b099406bb328898a7443921f22dbffd6dJason Sams
3259c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
326d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
327bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * Set the default ProgramVertex object seen as the parent state by the
328bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * root rendering script.
329bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
330bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @param p
331bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
332bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void bindProgramVertex(ProgramVertex p) {
333704ff64b099406bb328898a7443921f22dbffd6dJason Sams        validate();
334460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray        nContextBindProgramVertex((int)safeID(p));
335704ff64b099406bb328898a7443921f22dbffd6dJason Sams    }
336704ff64b099406bb328898a7443921f22dbffd6dJason Sams
337704ff64b099406bb328898a7443921f22dbffd6dJason Sams}
338