• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2008 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.renderscript;
18 
19 import java.lang.reflect.Field;
20 
21 import android.content.Context;
22 import android.graphics.PixelFormat;
23 import android.graphics.Bitmap;
24 import android.graphics.BitmapFactory;
25 import android.graphics.SurfaceTexture;
26 import android.util.Log;
27 import android.view.Surface;
28 import android.view.SurfaceHolder;
29 import android.view.SurfaceView;
30 
31 /**
32  * @deprecated in API 16
33  * The Graphics derivitive of Renderscript.  Extends the basic context to add a
34  * root script which is the display window for graphical output.  When the
35  * system needs to update the display the currently bound root script will be
36  * called.  This script is expected to issue the rendering commands to repaint
37  * the screen.
38  *
39  * <div class="special reference">
40  * <h3>Developer Guides</h3>
41  * <p>For more information about creating an application that uses Renderscript, read the
42  * <a href="{@docRoot}guide/topics/graphics/renderscript.html">Renderscript</a> developer guide.</p>
43  * </div>
44  **/
45 public class RenderScriptGL extends RenderScript {
46     int mWidth;
47     int mHeight;
48 
49     /**
50      * @deprecated in API 16
51      * Class which is used to describe a pixel format for a graphical buffer.
52      * This is used to describe the intended format of the display surface.
53      *
54      * The configuration is described by pairs of minimum and preferred bit
55      * depths for each component within the config and additional structural
56      * information.
57      */
58     public static class SurfaceConfig {
59         int mDepthMin       = 0;
60         int mDepthPref      = 0;
61         int mStencilMin     = 0;
62         int mStencilPref    = 0;
63         int mColorMin       = 8;
64         int mColorPref      = 8;
65         int mAlphaMin       = 0;
66         int mAlphaPref      = 0;
67         int mSamplesMin     = 1;
68         int mSamplesPref    = 1;
69         float mSamplesQ     = 1.f;
70 
71         /**
72          * @deprecated in API 16
73          */
SurfaceConfig()74         public SurfaceConfig() {
75         }
76 
77         /**
78          * @deprecated in API 16
79          */
SurfaceConfig(SurfaceConfig sc)80         public SurfaceConfig(SurfaceConfig sc) {
81             mDepthMin = sc.mDepthMin;
82             mDepthPref = sc.mDepthPref;
83             mStencilMin = sc.mStencilMin;
84             mStencilPref = sc.mStencilPref;
85             mColorMin = sc.mColorMin;
86             mColorPref = sc.mColorPref;
87             mAlphaMin = sc.mAlphaMin;
88             mAlphaPref = sc.mAlphaPref;
89             mSamplesMin = sc.mSamplesMin;
90             mSamplesPref = sc.mSamplesPref;
91             mSamplesQ = sc.mSamplesQ;
92         }
93 
validateRange(int umin, int upref, int rmin, int rmax)94         private void validateRange(int umin, int upref, int rmin, int rmax) {
95             if (umin < rmin || umin > rmax) {
96                 throw new RSIllegalArgumentException("Minimum value provided out of range.");
97             }
98             if (upref < umin) {
99                 throw new RSIllegalArgumentException("preferred must be >= Minimum.");
100             }
101         }
102 
103         /**
104          * @deprecated in API 16
105          * Set the per-component bit depth for color (red, green, blue).  This
106          * configures the surface for an unsigned integer buffer type.
107          *
108          * @param minimum
109          * @param preferred
110          */
setColor(int minimum, int preferred)111         public void setColor(int minimum, int preferred) {
112             validateRange(minimum, preferred, 5, 8);
113             mColorMin = minimum;
114             mColorPref = preferred;
115         }
116 
117         /**
118          * @deprecated in API 16
119          * Set the bit depth for alpha. This configures the surface for
120          * an unsigned integer buffer type.
121          *
122          * @param minimum
123          * @param preferred
124          */
setAlpha(int minimum, int preferred)125         public void setAlpha(int minimum, int preferred) {
126             validateRange(minimum, preferred, 0, 8);
127             mAlphaMin = minimum;
128             mAlphaPref = preferred;
129         }
130 
131          /**
132          * @deprecated in API 16
133          * Set the bit depth for the depth buffer. This configures the
134          * surface for an unsigned integer buffer type.  If a minimum of 0
135          * is specified then its possible no depth buffer will be
136          * allocated.
137          *
138          * @param minimum
139          * @param preferred
140          */
setDepth(int minimum, int preferred)141         public void setDepth(int minimum, int preferred) {
142             validateRange(minimum, preferred, 0, 24);
143             mDepthMin = minimum;
144             mDepthPref = preferred;
145         }
146 
147         /**
148          * @deprecated in API 16
149          * Configure the multisample rendering.
150          *
151          * @param minimum The required number of samples, must be at least 1.
152          * @param preferred The targe number of samples, must be at least
153          *                  minimum
154          * @param Q  The quality of samples, range 0-1.  Used to decide between
155          *           different formats which have the same number of samples but
156          *           different rendering quality.
157          */
setSamples(int minimum, int preferred, float Q)158         public void setSamples(int minimum, int preferred, float Q) {
159             validateRange(minimum, preferred, 1, 32);
160             if (Q < 0.0f || Q > 1.0f) {
161                 throw new RSIllegalArgumentException("Quality out of 0-1 range.");
162             }
163             mSamplesMin = minimum;
164             mSamplesPref = preferred;
165             mSamplesQ = Q;
166         }
167     };
168 
169     SurfaceConfig mSurfaceConfig;
170 
171     /**
172      * @deprecated in API 16
173      * Construct a new RenderScriptGL context.
174      *
175      * @param ctx The context.
176      * @param sc The desired format of the primary rendering surface.
177      */
RenderScriptGL(Context ctx, SurfaceConfig sc)178     public RenderScriptGL(Context ctx, SurfaceConfig sc) {
179         super(ctx);
180         mSurfaceConfig = new SurfaceConfig(sc);
181 
182         int sdkVersion = ctx.getApplicationInfo().targetSdkVersion;
183 
184         mWidth = 0;
185         mHeight = 0;
186         mDev = nDeviceCreate();
187         int dpi = ctx.getResources().getDisplayMetrics().densityDpi;
188         mContext = nContextCreateGL(mDev, 0, sdkVersion,
189                                     mSurfaceConfig.mColorMin, mSurfaceConfig.mColorPref,
190                                     mSurfaceConfig.mAlphaMin, mSurfaceConfig.mAlphaPref,
191                                     mSurfaceConfig.mDepthMin, mSurfaceConfig.mDepthPref,
192                                     mSurfaceConfig.mStencilMin, mSurfaceConfig.mStencilPref,
193                                     mSurfaceConfig.mSamplesMin, mSurfaceConfig.mSamplesPref,
194                                     mSurfaceConfig.mSamplesQ, dpi);
195         if (mContext == 0) {
196             throw new RSDriverException("Failed to create RS context.");
197         }
198         mMessageThread = new MessageThread(this);
199         mMessageThread.start();
200     }
201 
202     /**
203      * @deprecated in API 16
204      * Bind an os surface
205      *
206      *
207      * @param w
208      * @param h
209      * @param sur
210      */
setSurface(SurfaceHolder sur, int w, int h)211     public void setSurface(SurfaceHolder sur, int w, int h) {
212         validate();
213         Surface s = null;
214         if (sur != null) {
215             s = sur.getSurface();
216         }
217         mWidth = w;
218         mHeight = h;
219         nContextSetSurface(w, h, s);
220     }
221 
222     /**
223      * @deprecated in API 16
224      * Bind an os surface
225      *
226      * @param w
227      * @param h
228      * @param sur
229      */
setSurfaceTexture(SurfaceTexture sur, int w, int h)230     public void setSurfaceTexture(SurfaceTexture sur, int w, int h) {
231         validate();
232         //android.util.Log.v("rs", "set surface " + sur + " w=" + w + ", h=" + h);
233 
234         mWidth = w;
235         mHeight = h;
236         nContextSetSurfaceTexture(w, h, sur);
237     }
238 
239     /**
240      * @deprecated in API 16
241      * return the height of the last set surface.
242      *
243      * @return int
244      */
getHeight()245     public int getHeight() {
246         return mHeight;
247     }
248 
249     /**
250      * @deprecated in API 16
251      * return the width of the last set surface.
252      *
253      * @return int
254      */
getWidth()255     public int getWidth() {
256         return mWidth;
257     }
258 
259     /**
260      * @deprecated in API 16
261      * Temporarly halt calls to the root rendering script.
262      *
263      */
pause()264     public void pause() {
265         validate();
266         nContextPause();
267     }
268 
269     /**
270      * @deprecated in API 16
271      * Resume calls to the root rendering script.
272      *
273      */
resume()274     public void resume() {
275         validate();
276         nContextResume();
277     }
278 
279 
280     /**
281      * @deprecated in API 16
282      * Set the script to handle calls to render the primary surface.
283      *
284      * @param s Graphics script to process rendering requests.
285      */
bindRootScript(Script s)286     public void bindRootScript(Script s) {
287         validate();
288         nContextBindRootScript(safeID(s));
289     }
290 
291     /**
292      * @deprecated in API 16
293      * Set the default ProgramStore object seen as the parent state by the root
294      * rendering script.
295      *
296      * @param p
297      */
bindProgramStore(ProgramStore p)298     public void bindProgramStore(ProgramStore p) {
299         validate();
300         nContextBindProgramStore(safeID(p));
301     }
302 
303     /**
304      * @deprecated in API 16
305      * Set the default ProgramFragment object seen as the parent state by the
306      * root rendering script.
307      *
308      * @param p
309      */
bindProgramFragment(ProgramFragment p)310     public void bindProgramFragment(ProgramFragment p) {
311         validate();
312         nContextBindProgramFragment(safeID(p));
313     }
314 
315     /**
316      * @deprecated in API 16
317      * Set the default ProgramRaster object seen as the parent state by the
318      * root rendering script.
319      *
320      * @param p
321      */
bindProgramRaster(ProgramRaster p)322     public void bindProgramRaster(ProgramRaster p) {
323         validate();
324         nContextBindProgramRaster(safeID(p));
325     }
326 
327     /**
328      * @deprecated in API 16
329      * Set the default ProgramVertex object seen as the parent state by the
330      * root rendering script.
331      *
332      * @param p
333      */
bindProgramVertex(ProgramVertex p)334     public void bindProgramVertex(ProgramVertex p) {
335         validate();
336         nContextBindProgramVertex(safeID(p));
337     }
338 
339 }
340