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/**
32a90842283e322b1210e2bea5850b05177e3d87afTim Murray * @hide
33d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams * @deprecated in API 16
34c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * The Graphics derivitive of RenderScript.  Extends the basic context to add a
3527676fe24be7444a174c15df476e49adc5335d03Jason Sams * root script which is the display window for graphical output.  When the
3627676fe24be7444a174c15df476e49adc5335d03Jason Sams * system needs to update the display the currently bound root script will be
3727676fe24be7444a174c15df476e49adc5335d03Jason Sams * called.  This script is expected to issue the rendering commands to repaint
3827676fe24be7444a174c15df476e49adc5335d03Jason Sams * the screen.
393aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez *
403aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <div class="special reference">
413aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <h3>Developer Guides</h3>
42c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * <p>For more information about creating an application that uses RenderScript, read the
43c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * <a href="{@docRoot}guide/topics/renderscript/index.html">RenderScript</a> developer guide.</p>
443aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * </div>
45704ff64b099406bb328898a7443921f22dbffd6dJason Sams **/
46704ff64b099406bb328898a7443921f22dbffd6dJason Samspublic class RenderScriptGL extends RenderScript {
47704ff64b099406bb328898a7443921f22dbffd6dJason Sams    int mWidth;
48704ff64b099406bb328898a7443921f22dbffd6dJason Sams    int mHeight;
49704ff64b099406bb328898a7443921f22dbffd6dJason Sams
509c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
51d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
5227676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Class which is used to describe a pixel format for a graphical buffer.
5327676fe24be7444a174c15df476e49adc5335d03Jason Sams     * This is used to describe the intended format of the display surface.
5427676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
55bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * The configuration is described by pairs of minimum and preferred bit
56bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * depths for each component within the config and additional structural
57bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * information.
5827676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
592222aa90031604e9752ebc2909303a84139b8b18Jason Sams    public static class SurfaceConfig {
602222aa90031604e9752ebc2909303a84139b8b18Jason Sams        int mDepthMin       = 0;
612222aa90031604e9752ebc2909303a84139b8b18Jason Sams        int mDepthPref      = 0;
622222aa90031604e9752ebc2909303a84139b8b18Jason Sams        int mStencilMin     = 0;
632222aa90031604e9752ebc2909303a84139b8b18Jason Sams        int mStencilPref    = 0;
642222aa90031604e9752ebc2909303a84139b8b18Jason Sams        int mColorMin       = 8;
652222aa90031604e9752ebc2909303a84139b8b18Jason Sams        int mColorPref      = 8;
662222aa90031604e9752ebc2909303a84139b8b18Jason Sams        int mAlphaMin       = 0;
672222aa90031604e9752ebc2909303a84139b8b18Jason Sams        int mAlphaPref      = 0;
682222aa90031604e9752ebc2909303a84139b8b18Jason Sams        int mSamplesMin     = 1;
692222aa90031604e9752ebc2909303a84139b8b18Jason Sams        int mSamplesPref    = 1;
702222aa90031604e9752ebc2909303a84139b8b18Jason Sams        float mSamplesQ     = 1.f;
712222aa90031604e9752ebc2909303a84139b8b18Jason Sams
72d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams        /**
73d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         * @deprecated in API 16
74d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         */
752222aa90031604e9752ebc2909303a84139b8b18Jason Sams        public SurfaceConfig() {
762222aa90031604e9752ebc2909303a84139b8b18Jason Sams        }
772222aa90031604e9752ebc2909303a84139b8b18Jason Sams
78d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams        /**
79d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         * @deprecated in API 16
80d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         */
812222aa90031604e9752ebc2909303a84139b8b18Jason Sams        public SurfaceConfig(SurfaceConfig sc) {
822222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mDepthMin = sc.mDepthMin;
832222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mDepthPref = sc.mDepthPref;
842222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mStencilMin = sc.mStencilMin;
852222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mStencilPref = sc.mStencilPref;
862222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mColorMin = sc.mColorMin;
872222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mColorPref = sc.mColorPref;
882222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mAlphaMin = sc.mAlphaMin;
892222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mAlphaPref = sc.mAlphaPref;
902222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mSamplesMin = sc.mSamplesMin;
912222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mSamplesPref = sc.mSamplesPref;
922222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mSamplesQ = sc.mSamplesQ;
932222aa90031604e9752ebc2909303a84139b8b18Jason Sams        }
942222aa90031604e9752ebc2909303a84139b8b18Jason Sams
952222aa90031604e9752ebc2909303a84139b8b18Jason Sams        private void validateRange(int umin, int upref, int rmin, int rmax) {
962222aa90031604e9752ebc2909303a84139b8b18Jason Sams            if (umin < rmin || umin > rmax) {
97c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams                throw new RSIllegalArgumentException("Minimum value provided out of range.");
982222aa90031604e9752ebc2909303a84139b8b18Jason Sams            }
992222aa90031604e9752ebc2909303a84139b8b18Jason Sams            if (upref < umin) {
100bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams                throw new RSIllegalArgumentException("preferred must be >= Minimum.");
1012222aa90031604e9752ebc2909303a84139b8b18Jason Sams            }
1022222aa90031604e9752ebc2909303a84139b8b18Jason Sams        }
1032222aa90031604e9752ebc2909303a84139b8b18Jason Sams
1049c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines        /**
105d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         * @deprecated in API 16
106bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * Set the per-component bit depth for color (red, green, blue).  This
107bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * configures the surface for an unsigned integer buffer type.
108bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         *
109bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * @param minimum
110bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * @param preferred
111bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         */
112bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        public void setColor(int minimum, int preferred) {
113bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            validateRange(minimum, preferred, 5, 8);
1142222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mColorMin = minimum;
115bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            mColorPref = preferred;
1162222aa90031604e9752ebc2909303a84139b8b18Jason Sams        }
117bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams
1189c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines        /**
119d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         * @deprecated in API 16
120bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * Set the bit depth for alpha. This configures the surface for
121bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * an unsigned integer buffer type.
122bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         *
123bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * @param minimum
124bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * @param preferred
125bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         */
126bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        public void setAlpha(int minimum, int preferred) {
127bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            validateRange(minimum, preferred, 0, 8);
1282222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mAlphaMin = minimum;
129bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            mAlphaPref = preferred;
1302222aa90031604e9752ebc2909303a84139b8b18Jason Sams        }
131bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams
1329c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines         /**
133d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         * @deprecated in API 16
134bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * Set the bit depth for the depth buffer. This configures the
135bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * surface for an unsigned integer buffer type.  If a minimum of 0
136bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * is specified then its possible no depth buffer will be
137bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * allocated.
138bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         *
139bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * @param minimum
140bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * @param preferred
141bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         */
142bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        public void setDepth(int minimum, int preferred) {
143bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            validateRange(minimum, preferred, 0, 24);
1442222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mDepthMin = minimum;
145bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            mDepthPref = preferred;
1462222aa90031604e9752ebc2909303a84139b8b18Jason Sams        }
147bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams
1489c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines        /**
149d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         * @deprecated in API 16
150bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * Configure the multisample rendering.
151bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         *
152bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * @param minimum The required number of samples, must be at least 1.
153bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * @param preferred The targe number of samples, must be at least
154bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         *                  minimum
155bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * @param Q  The quality of samples, range 0-1.  Used to decide between
156bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         *           different formats which have the same number of samples but
157bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         *           different rendering quality.
158bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         */
159bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        public void setSamples(int minimum, int preferred, float Q) {
160bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            validateRange(minimum, preferred, 1, 32);
1612222aa90031604e9752ebc2909303a84139b8b18Jason Sams            if (Q < 0.0f || Q > 1.0f) {
162c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams                throw new RSIllegalArgumentException("Quality out of 0-1 range.");
1632222aa90031604e9752ebc2909303a84139b8b18Jason Sams            }
1642222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mSamplesMin = minimum;
165bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            mSamplesPref = preferred;
1662222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mSamplesQ = Q;
1672222aa90031604e9752ebc2909303a84139b8b18Jason Sams        }
1682222aa90031604e9752ebc2909303a84139b8b18Jason Sams    };
1692222aa90031604e9752ebc2909303a84139b8b18Jason Sams
1702222aa90031604e9752ebc2909303a84139b8b18Jason Sams    SurfaceConfig mSurfaceConfig;
1712222aa90031604e9752ebc2909303a84139b8b18Jason Sams
1729c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
173d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
174bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * Construct a new RenderScriptGL context.
175bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
1766b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao     * @param ctx The context.
1778cecbb5293f73e3f63f2601dda68016762c58a0cStephen Hines     * @param sc The desired format of the primary rendering surface.
178bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
1796b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao    public RenderScriptGL(Context ctx, SurfaceConfig sc) {
1806b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao        super(ctx);
1812222aa90031604e9752ebc2909303a84139b8b18Jason Sams        mSurfaceConfig = new SurfaceConfig(sc);
1822222aa90031604e9752ebc2909303a84139b8b18Jason Sams
1831a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams        int sdkVersion = ctx.getApplicationInfo().targetSdkVersion;
1844382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines
185704ff64b099406bb328898a7443921f22dbffd6dJason Sams        mWidth = 0;
186704ff64b099406bb328898a7443921f22dbffd6dJason Sams        mHeight = 0;
187704ff64b099406bb328898a7443921f22dbffd6dJason Sams        mDev = nDeviceCreate();
1882c74ad9aae29cc64fece926f353825a7925792c2Alex Sakhartchouk        int dpi = ctx.getResources().getDisplayMetrics().densityDpi;
1894382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines        mContext = nContextCreateGL(mDev, 0, sdkVersion,
19011c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                                    mSurfaceConfig.mColorMin, mSurfaceConfig.mColorPref,
19111c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                                    mSurfaceConfig.mAlphaMin, mSurfaceConfig.mAlphaPref,
19211c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                                    mSurfaceConfig.mDepthMin, mSurfaceConfig.mDepthPref,
19311c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                                    mSurfaceConfig.mStencilMin, mSurfaceConfig.mStencilPref,
19411c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                                    mSurfaceConfig.mSamplesMin, mSurfaceConfig.mSamplesPref,
1952c74ad9aae29cc64fece926f353825a7925792c2Alex Sakhartchouk                                    mSurfaceConfig.mSamplesQ, dpi);
196d5f06300341df0990be3e0b7a26fa49b13c6fc19Jason Sams        if (mContext == 0) {
197d5f06300341df0990be3e0b7a26fa49b13c6fc19Jason Sams            throw new RSDriverException("Failed to create RS context.");
198d5f06300341df0990be3e0b7a26fa49b13c6fc19Jason Sams        }
199704ff64b099406bb328898a7443921f22dbffd6dJason Sams        mMessageThread = new MessageThread(this);
200704ff64b099406bb328898a7443921f22dbffd6dJason Sams        mMessageThread.start();
201704ff64b099406bb328898a7443921f22dbffd6dJason Sams    }
202704ff64b099406bb328898a7443921f22dbffd6dJason Sams
2039c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
204d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
205bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * Bind an os surface
206bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
207bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
208bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @param w
209bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @param h
210bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @param sur
211bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
212bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void setSurface(SurfaceHolder sur, int w, int h) {
213bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        validate();
214faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams        Surface s = null;
215bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        if (sur != null) {
216faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams            s = sur.getSurface();
217bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        }
218704ff64b099406bb328898a7443921f22dbffd6dJason Sams        mWidth = w;
219704ff64b099406bb328898a7443921f22dbffd6dJason Sams        mHeight = h;
220faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams        nContextSetSurface(w, h, s);
221faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams    }
222faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams
2239c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
224e619de6a4e4326b7662b523ea2f403801291d432Jason Sams     * @deprecated in API 16
225faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams     * Bind an os surface
226faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams     *
227faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams     * @param w
228faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams     * @param h
229faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams     * @param sur
230faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams     */
231faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams    public void setSurfaceTexture(SurfaceTexture sur, int w, int h) {
232faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams        validate();
233faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams        //android.util.Log.v("rs", "set surface " + sur + " w=" + w + ", h=" + h);
234faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams
235faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams        mWidth = w;
236faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams        mHeight = h;
237faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams        nContextSetSurfaceTexture(w, h, sur);
238704ff64b099406bb328898a7443921f22dbffd6dJason Sams    }
239704ff64b099406bb328898a7443921f22dbffd6dJason Sams
2409c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
241d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
242bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * return the height of the last set surface.
243bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
244bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @return int
245bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
2465585e36a413dcc70a4bdd04063ea31db2519ea8dJason Sams    public int getHeight() {
2475585e36a413dcc70a4bdd04063ea31db2519ea8dJason Sams        return mHeight;
2485585e36a413dcc70a4bdd04063ea31db2519ea8dJason Sams    }
2495585e36a413dcc70a4bdd04063ea31db2519ea8dJason Sams
2509c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
251d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
252bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * return the width of the last set surface.
253bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
254bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @return int
255bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
2565585e36a413dcc70a4bdd04063ea31db2519ea8dJason Sams    public int getWidth() {
2575585e36a413dcc70a4bdd04063ea31db2519ea8dJason Sams        return mWidth;
2585585e36a413dcc70a4bdd04063ea31db2519ea8dJason Sams    }
259704ff64b099406bb328898a7443921f22dbffd6dJason Sams
2609c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
261d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
262bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * Temporarly halt calls to the root rendering script.
263bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
264bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
265bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void pause() {
266704ff64b099406bb328898a7443921f22dbffd6dJason Sams        validate();
267704ff64b099406bb328898a7443921f22dbffd6dJason Sams        nContextPause();
268704ff64b099406bb328898a7443921f22dbffd6dJason Sams    }
269704ff64b099406bb328898a7443921f22dbffd6dJason Sams
2709c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
271d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
272bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * Resume calls to the root rendering script.
273bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
274bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
275bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void resume() {
276704ff64b099406bb328898a7443921f22dbffd6dJason Sams        validate();
277704ff64b099406bb328898a7443921f22dbffd6dJason Sams        nContextResume();
278704ff64b099406bb328898a7443921f22dbffd6dJason Sams    }
279704ff64b099406bb328898a7443921f22dbffd6dJason Sams
280704ff64b099406bb328898a7443921f22dbffd6dJason Sams
2819c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
282d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
283bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * Set the script to handle calls to render the primary surface.
284bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
285bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @param s Graphics script to process rendering requests.
286bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
287bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void bindRootScript(Script s) {
288704ff64b099406bb328898a7443921f22dbffd6dJason Sams        validate();
289704ff64b099406bb328898a7443921f22dbffd6dJason Sams        nContextBindRootScript(safeID(s));
290704ff64b099406bb328898a7443921f22dbffd6dJason Sams    }
291704ff64b099406bb328898a7443921f22dbffd6dJason Sams
2929c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
293d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
294bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * Set the default ProgramStore object seen as the parent state by the root
295bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * rendering script.
296bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
297bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @param p
298bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
299bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void bindProgramStore(ProgramStore p) {
300704ff64b099406bb328898a7443921f22dbffd6dJason Sams        validate();
30154db59c3594e887a412a24713fc3daa1c2404593Jason Sams        nContextBindProgramStore(safeID(p));
302704ff64b099406bb328898a7443921f22dbffd6dJason Sams    }
303704ff64b099406bb328898a7443921f22dbffd6dJason Sams
3049c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
305d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
306bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * Set the default ProgramFragment object seen as the parent state by the
307bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * root rendering script.
308bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
309bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @param p
310bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
311bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void bindProgramFragment(ProgramFragment p) {
312704ff64b099406bb328898a7443921f22dbffd6dJason Sams        validate();
313704ff64b099406bb328898a7443921f22dbffd6dJason Sams        nContextBindProgramFragment(safeID(p));
314704ff64b099406bb328898a7443921f22dbffd6dJason Sams    }
315704ff64b099406bb328898a7443921f22dbffd6dJason Sams
3169c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
317d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
318bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * Set the default ProgramRaster object seen as the parent state by the
319bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * root rendering script.
320bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
321bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @param p
322bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
323bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void bindProgramRaster(ProgramRaster p) {
324704ff64b099406bb328898a7443921f22dbffd6dJason Sams        validate();
325704ff64b099406bb328898a7443921f22dbffd6dJason Sams        nContextBindProgramRaster(safeID(p));
326704ff64b099406bb328898a7443921f22dbffd6dJason Sams    }
327704ff64b099406bb328898a7443921f22dbffd6dJason Sams
3289c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
329d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
330bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * Set the default ProgramVertex object seen as the parent state by the
331bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * root rendering script.
332bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
333bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @param p
334bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
335bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void bindProgramVertex(ProgramVertex p) {
336704ff64b099406bb328898a7443921f22dbffd6dJason Sams        validate();
337704ff64b099406bb328898a7443921f22dbffd6dJason Sams        nContextBindProgramVertex(safeID(p));
338704ff64b099406bb328898a7443921f22dbffd6dJason Sams    }
339704ff64b099406bb328898a7443921f22dbffd6dJason Sams
340704ff64b099406bb328898a7443921f22dbffd6dJason Sams}
341