RenderScriptGL.java revision 6b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bd
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;
25704ff64b099406bb328898a7443921f22dbffd6dJason Samsimport android.util.Config;
26704ff64b099406bb328898a7443921f22dbffd6dJason Samsimport android.util.Log;
27704ff64b099406bb328898a7443921f22dbffd6dJason Samsimport android.view.Surface;
282222aa90031604e9752ebc2909303a84139b8b18Jason Samsimport android.view.SurfaceHolder;
292222aa90031604e9752ebc2909303a84139b8b18Jason Samsimport android.view.SurfaceView;
30704ff64b099406bb328898a7443921f22dbffd6dJason Sams
31704ff64b099406bb328898a7443921f22dbffd6dJason Sams/**
32704ff64b099406bb328898a7443921f22dbffd6dJason Sams * @hide
33704ff64b099406bb328898a7443921f22dbffd6dJason Sams *
3427676fe24be7444a174c15df476e49adc5335d03Jason Sams * 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.
39704ff64b099406bb328898a7443921f22dbffd6dJason Sams **/
40704ff64b099406bb328898a7443921f22dbffd6dJason Samspublic class RenderScriptGL extends RenderScript {
41704ff64b099406bb328898a7443921f22dbffd6dJason Sams    private Surface mSurface;
42704ff64b099406bb328898a7443921f22dbffd6dJason Sams    int mWidth;
43704ff64b099406bb328898a7443921f22dbffd6dJason Sams    int mHeight;
44704ff64b099406bb328898a7443921f22dbffd6dJason Sams
4527676fe24be7444a174c15df476e49adc5335d03Jason Sams    /**
4627676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Class which is used to describe a pixel format for a graphical buffer.
4727676fe24be7444a174c15df476e49adc5335d03Jason Sams     * This is used to describe the intended format of the display surface.
4827676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
49bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * The configuration is described by pairs of minimum and preferred bit
50bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * depths for each component within the config and additional structural
51bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * information.
5227676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
532222aa90031604e9752ebc2909303a84139b8b18Jason Sams    public static class SurfaceConfig {
542222aa90031604e9752ebc2909303a84139b8b18Jason Sams        int mDepthMin       = 0;
552222aa90031604e9752ebc2909303a84139b8b18Jason Sams        int mDepthPref      = 0;
562222aa90031604e9752ebc2909303a84139b8b18Jason Sams        int mStencilMin     = 0;
572222aa90031604e9752ebc2909303a84139b8b18Jason Sams        int mStencilPref    = 0;
582222aa90031604e9752ebc2909303a84139b8b18Jason Sams        int mColorMin       = 8;
592222aa90031604e9752ebc2909303a84139b8b18Jason Sams        int mColorPref      = 8;
602222aa90031604e9752ebc2909303a84139b8b18Jason Sams        int mAlphaMin       = 0;
612222aa90031604e9752ebc2909303a84139b8b18Jason Sams        int mAlphaPref      = 0;
622222aa90031604e9752ebc2909303a84139b8b18Jason Sams        int mSamplesMin     = 1;
632222aa90031604e9752ebc2909303a84139b8b18Jason Sams        int mSamplesPref    = 1;
642222aa90031604e9752ebc2909303a84139b8b18Jason Sams        float mSamplesQ     = 1.f;
652222aa90031604e9752ebc2909303a84139b8b18Jason Sams
662222aa90031604e9752ebc2909303a84139b8b18Jason Sams        public SurfaceConfig() {
672222aa90031604e9752ebc2909303a84139b8b18Jason Sams        }
682222aa90031604e9752ebc2909303a84139b8b18Jason Sams
692222aa90031604e9752ebc2909303a84139b8b18Jason Sams        public SurfaceConfig(SurfaceConfig sc) {
702222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mDepthMin = sc.mDepthMin;
712222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mDepthPref = sc.mDepthPref;
722222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mStencilMin = sc.mStencilMin;
732222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mStencilPref = sc.mStencilPref;
742222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mColorMin = sc.mColorMin;
752222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mColorPref = sc.mColorPref;
762222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mAlphaMin = sc.mAlphaMin;
772222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mAlphaPref = sc.mAlphaPref;
782222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mSamplesMin = sc.mSamplesMin;
792222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mSamplesPref = sc.mSamplesPref;
802222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mSamplesQ = sc.mSamplesQ;
812222aa90031604e9752ebc2909303a84139b8b18Jason Sams        }
822222aa90031604e9752ebc2909303a84139b8b18Jason Sams
832222aa90031604e9752ebc2909303a84139b8b18Jason Sams        private void validateRange(int umin, int upref, int rmin, int rmax) {
842222aa90031604e9752ebc2909303a84139b8b18Jason Sams            if (umin < rmin || umin > rmax) {
85c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams                throw new RSIllegalArgumentException("Minimum value provided out of range.");
862222aa90031604e9752ebc2909303a84139b8b18Jason Sams            }
872222aa90031604e9752ebc2909303a84139b8b18Jason Sams            if (upref < umin) {
88bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams                throw new RSIllegalArgumentException("preferred must be >= Minimum.");
892222aa90031604e9752ebc2909303a84139b8b18Jason Sams            }
902222aa90031604e9752ebc2909303a84139b8b18Jason Sams        }
912222aa90031604e9752ebc2909303a84139b8b18Jason Sams
92bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        /**
93bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * Set the per-component bit depth for color (red, green, blue).  This
94bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * configures the surface for an unsigned integer buffer type.
95bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         *
96bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * @param minimum
97bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * @param preferred
98bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         */
99bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        public void setColor(int minimum, int preferred) {
100bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            validateRange(minimum, preferred, 5, 8);
1012222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mColorMin = minimum;
102bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            mColorPref = preferred;
1032222aa90031604e9752ebc2909303a84139b8b18Jason Sams        }
104bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams
105bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        /**
106bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * Set the bit depth for alpha. This configures the surface for
107bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * an unsigned integer buffer type.
108bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         *
109bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * @param minimum
110bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * @param preferred
111bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         */
112bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        public void setAlpha(int minimum, int preferred) {
113bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            validateRange(minimum, preferred, 0, 8);
1142222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mAlphaMin = minimum;
115bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            mAlphaPref = preferred;
1162222aa90031604e9752ebc2909303a84139b8b18Jason Sams        }
117bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams
118bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         /**
119bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * Set the bit depth for the depth buffer. This configures the
120bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * surface for an unsigned integer buffer type.  If a minimum of 0
121bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * is specified then its possible no depth buffer will be
122bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * allocated.
123bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         *
124bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * @param minimum
125bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * @param preferred
126bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         */
127bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        public void setDepth(int minimum, int preferred) {
128bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            validateRange(minimum, preferred, 0, 24);
1292222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mDepthMin = minimum;
130bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            mDepthPref = preferred;
1312222aa90031604e9752ebc2909303a84139b8b18Jason Sams        }
132bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams
133bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        /**
134bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * Configure the multisample rendering.
135bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         *
136bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * @param minimum The required number of samples, must be at least 1.
137bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * @param preferred The targe number of samples, must be at least
138bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         *                  minimum
139bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         * @param Q  The quality of samples, range 0-1.  Used to decide between
140bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         *           different formats which have the same number of samples but
141bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         *           different rendering quality.
142bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams         */
143bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        public void setSamples(int minimum, int preferred, float Q) {
144bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            validateRange(minimum, preferred, 1, 32);
1452222aa90031604e9752ebc2909303a84139b8b18Jason Sams            if (Q < 0.0f || Q > 1.0f) {
146c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams                throw new RSIllegalArgumentException("Quality out of 0-1 range.");
1472222aa90031604e9752ebc2909303a84139b8b18Jason Sams            }
1482222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mSamplesMin = minimum;
149bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            mSamplesPref = preferred;
1502222aa90031604e9752ebc2909303a84139b8b18Jason Sams            mSamplesQ = Q;
1512222aa90031604e9752ebc2909303a84139b8b18Jason Sams        }
1522222aa90031604e9752ebc2909303a84139b8b18Jason Sams    };
1532222aa90031604e9752ebc2909303a84139b8b18Jason Sams
1542222aa90031604e9752ebc2909303a84139b8b18Jason Sams    SurfaceConfig mSurfaceConfig;
155bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams/*
156bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    // Keep?
1572222aa90031604e9752ebc2909303a84139b8b18Jason Sams    public void configureSurface(SurfaceHolder sh) {
15811c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams        if (mSurfaceConfig.mAlphaMin > 1) {
15911c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams            sh.setFormat(PixelFormat.RGBA_8888);
16011c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams        } else {
16111c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams            sh.setFormat(PixelFormat.RGBX_8888);
16211c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams        }
1632222aa90031604e9752ebc2909303a84139b8b18Jason Sams    }
1642222aa90031604e9752ebc2909303a84139b8b18Jason Sams
1652222aa90031604e9752ebc2909303a84139b8b18Jason Sams    public void checkSurface(SurfaceHolder sh) {
1662222aa90031604e9752ebc2909303a84139b8b18Jason Sams    }
167bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams*/
1682222aa90031604e9752ebc2909303a84139b8b18Jason Sams
169bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    /**
170bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * Construct a new RenderScriptGL context.
171bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
1726b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao     * @param ctx The context.
173bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @param sc The desired format of the primart rendering surface.
174bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
1756b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao    public RenderScriptGL(Context ctx, SurfaceConfig sc) {
1766b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao        super(ctx);
1772222aa90031604e9752ebc2909303a84139b8b18Jason Sams        mSurfaceConfig = new SurfaceConfig(sc);
1782222aa90031604e9752ebc2909303a84139b8b18Jason Sams
179704ff64b099406bb328898a7443921f22dbffd6dJason Sams        mSurface = null;
180704ff64b099406bb328898a7443921f22dbffd6dJason Sams        mWidth = 0;
181704ff64b099406bb328898a7443921f22dbffd6dJason Sams        mHeight = 0;
182704ff64b099406bb328898a7443921f22dbffd6dJason Sams        mDev = nDeviceCreate();
18311c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams        mContext = nContextCreateGL(mDev, 0,
18411c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                                    mSurfaceConfig.mColorMin, mSurfaceConfig.mColorPref,
18511c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                                    mSurfaceConfig.mAlphaMin, mSurfaceConfig.mAlphaPref,
18611c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                                    mSurfaceConfig.mDepthMin, mSurfaceConfig.mDepthPref,
18711c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                                    mSurfaceConfig.mStencilMin, mSurfaceConfig.mStencilPref,
18811c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                                    mSurfaceConfig.mSamplesMin, mSurfaceConfig.mSamplesPref,
18911c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                                    mSurfaceConfig.mSamplesQ);
190d5f06300341df0990be3e0b7a26fa49b13c6fc19Jason Sams        if (mContext == 0) {
191d5f06300341df0990be3e0b7a26fa49b13c6fc19Jason Sams            throw new RSDriverException("Failed to create RS context.");
192d5f06300341df0990be3e0b7a26fa49b13c6fc19Jason Sams        }
193704ff64b099406bb328898a7443921f22dbffd6dJason Sams        mMessageThread = new MessageThread(this);
194704ff64b099406bb328898a7443921f22dbffd6dJason Sams        mMessageThread.start();
195704ff64b099406bb328898a7443921f22dbffd6dJason Sams    }
196704ff64b099406bb328898a7443921f22dbffd6dJason Sams
197bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    /**
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();
207bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        if (sur != null) {
208bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            mSurface = sur.getSurface();
209bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        } else {
210bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            mSurface = null;
211bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        }
212704ff64b099406bb328898a7443921f22dbffd6dJason Sams        mWidth = w;
213704ff64b099406bb328898a7443921f22dbffd6dJason Sams        mHeight = h;
214704ff64b099406bb328898a7443921f22dbffd6dJason Sams        nContextSetSurface(w, h, mSurface);
215704ff64b099406bb328898a7443921f22dbffd6dJason Sams    }
216704ff64b099406bb328898a7443921f22dbffd6dJason Sams
217bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    /**
218bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * return the height of the last set surface.
219bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
220bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @return int
221bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
2225585e36a413dcc70a4bdd04063ea31db2519ea8dJason Sams    public int getHeight() {
2235585e36a413dcc70a4bdd04063ea31db2519ea8dJason Sams        return mHeight;
2245585e36a413dcc70a4bdd04063ea31db2519ea8dJason Sams    }
2255585e36a413dcc70a4bdd04063ea31db2519ea8dJason Sams
226bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    /**
227bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * return the width of the last set surface.
228bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
229bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @return int
230bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
2315585e36a413dcc70a4bdd04063ea31db2519ea8dJason Sams    public int getWidth() {
2325585e36a413dcc70a4bdd04063ea31db2519ea8dJason Sams        return mWidth;
2335585e36a413dcc70a4bdd04063ea31db2519ea8dJason Sams    }
234704ff64b099406bb328898a7443921f22dbffd6dJason Sams
235bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    /**
236bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * Temporarly halt calls to the root rendering script.
237bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
238bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
239bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void pause() {
240704ff64b099406bb328898a7443921f22dbffd6dJason Sams        validate();
241704ff64b099406bb328898a7443921f22dbffd6dJason Sams        nContextPause();
242704ff64b099406bb328898a7443921f22dbffd6dJason Sams    }
243704ff64b099406bb328898a7443921f22dbffd6dJason Sams
244bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    /**
245bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * Resume calls to the root rendering script.
246bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
247bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
248bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void resume() {
249704ff64b099406bb328898a7443921f22dbffd6dJason Sams        validate();
250704ff64b099406bb328898a7443921f22dbffd6dJason Sams        nContextResume();
251704ff64b099406bb328898a7443921f22dbffd6dJason Sams    }
252704ff64b099406bb328898a7443921f22dbffd6dJason Sams
253704ff64b099406bb328898a7443921f22dbffd6dJason Sams
254bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    /**
255bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * Set the script to handle calls to render the primary surface.
256bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
257bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @param s Graphics script to process rendering requests.
258bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
259bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void bindRootScript(Script s) {
260704ff64b099406bb328898a7443921f22dbffd6dJason Sams        validate();
261704ff64b099406bb328898a7443921f22dbffd6dJason Sams        nContextBindRootScript(safeID(s));
262704ff64b099406bb328898a7443921f22dbffd6dJason Sams    }
263704ff64b099406bb328898a7443921f22dbffd6dJason Sams
264bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    /**
265bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * Set the default ProgramStore object seen as the parent state by the root
266bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * rendering script.
267bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
268bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @param p
269bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
270bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void bindProgramStore(ProgramStore p) {
271704ff64b099406bb328898a7443921f22dbffd6dJason Sams        validate();
27254db59c3594e887a412a24713fc3daa1c2404593Jason Sams        nContextBindProgramStore(safeID(p));
273704ff64b099406bb328898a7443921f22dbffd6dJason Sams    }
274704ff64b099406bb328898a7443921f22dbffd6dJason Sams
275bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    /**
276bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * Set the default ProgramFragment object seen as the parent state by the
277bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * root rendering script.
278bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
279bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @param p
280bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
281bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void bindProgramFragment(ProgramFragment p) {
282704ff64b099406bb328898a7443921f22dbffd6dJason Sams        validate();
283704ff64b099406bb328898a7443921f22dbffd6dJason Sams        nContextBindProgramFragment(safeID(p));
284704ff64b099406bb328898a7443921f22dbffd6dJason Sams    }
285704ff64b099406bb328898a7443921f22dbffd6dJason Sams
286bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    /**
287bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * Set the default ProgramRaster object seen as the parent state by the
288bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * root rendering script.
289bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
290bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @param p
291bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
292bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void bindProgramRaster(ProgramRaster p) {
293704ff64b099406bb328898a7443921f22dbffd6dJason Sams        validate();
294704ff64b099406bb328898a7443921f22dbffd6dJason Sams        nContextBindProgramRaster(safeID(p));
295704ff64b099406bb328898a7443921f22dbffd6dJason Sams    }
296704ff64b099406bb328898a7443921f22dbffd6dJason Sams
297bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    /**
298bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * Set the default ProgramVertex object seen as the parent state by the
299bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * root rendering script.
300bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
301bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @param p
302bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
303bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void bindProgramVertex(ProgramVertex p) {
304704ff64b099406bb328898a7443921f22dbffd6dJason Sams        validate();
305704ff64b099406bb328898a7443921f22dbffd6dJason Sams        nContextBindProgramVertex(safeID(p));
306704ff64b099406bb328898a7443921f22dbffd6dJason Sams    }
307704ff64b099406bb328898a7443921f22dbffd6dJason Sams
308704ff64b099406bb328898a7443921f22dbffd6dJason Sams}
309