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