blob: 1770a7aa4cccab836baa44a0a47f0cec99464983 [file] [log] [blame]
Jack Palevich60aa3ea2009-05-26 13:45:08 -07001/*
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
Jason Samse29d4712009-07-23 15:19:03 -070017/**
18 * @hide
19 *
20 **/
Jason Sams94d8e90a2009-06-10 16:09:05 -070021package android.renderscript;
Jack Palevich60aa3ea2009-05-26 13:45:08 -070022
Jack Palevich43702d82009-05-28 13:38:16 -070023import java.io.InputStream;
24import java.io.IOException;
25
Jason Samsdba3ba52009-07-30 14:56:12 -070026import android.graphics.Bitmap;
27import android.graphics.BitmapFactory;
28import android.graphics.drawable.BitmapDrawable;
29import android.graphics.drawable.Drawable;
30import android.graphics.Color;
31
Jack Palevich60aa3ea2009-05-26 13:45:08 -070032import android.os.Bundle;
Jack Palevich43702d82009-05-28 13:38:16 -070033import android.content.res.Resources;
Jack Palevich60aa3ea2009-05-26 13:45:08 -070034import android.util.Log;
35import android.util.Config;
36import android.view.Menu;
37import android.view.MenuItem;
38import android.view.Window;
39import android.view.View;
40import android.view.Surface;
41
Jason Samse29d4712009-07-23 15:19:03 -070042/**
43 * @hide
44 *
45 **/
Jack Palevich60aa3ea2009-05-26 13:45:08 -070046public class RenderScript {
Jason Samsf29ca502009-06-23 12:22:47 -070047 static final String LOG_TAG = "libRS_jni";
Jack Palevich60aa3ea2009-05-26 13:45:08 -070048 private static final boolean DEBUG = false;
49 private static final boolean LOG_ENABLED = DEBUG ? Config.LOGD : Config.LOGV;
50
51
52
Jason Sams02fb2cb2009-05-28 15:37:57 -070053 /*
Jack Palevich60aa3ea2009-05-26 13:45:08 -070054 * We use a class initializer to allow the native code to cache some
55 * field offsets.
56 */
57 private static boolean sInitialized;
58 native private static void _nInit();
59
Jason Samsdba3ba52009-07-30 14:56:12 -070060 private static BitmapFactory.Options mBitmapOptions = new BitmapFactory.Options();
61
Jack Palevich60aa3ea2009-05-26 13:45:08 -070062 static {
63 sInitialized = false;
64 try {
Jason Samse29d4712009-07-23 15:19:03 -070065 System.loadLibrary("rs_jni");
Jack Palevich60aa3ea2009-05-26 13:45:08 -070066 _nInit();
Jack Palevich60aa3ea2009-05-26 13:45:08 -070067 sInitialized = true;
68 } catch (UnsatisfiedLinkError e) {
69 Log.d(LOG_TAG, "RenderScript JNI library not found!");
70 }
Jason Samsdba3ba52009-07-30 14:56:12 -070071 mBitmapOptions.inScaled = false;
Jack Palevich60aa3ea2009-05-26 13:45:08 -070072 }
73
74 native private int nDeviceCreate();
75 native private void nDeviceDestroy(int dev);
76 native private int nContextCreate(int dev, Surface sur, int ver);
77 native private void nContextDestroy(int con);
78
79 //void rsContextBindSampler (uint32_t slot, RsSampler sampler);
80 //void rsContextBindRootScript (RsScript sampler);
81 native private void nContextBindRootScript(int script);
82 native private void nContextBindSampler(int sampler, int slot);
83 native private void nContextBindProgramFragmentStore(int pfs);
84 native private void nContextBindProgramFragment(int pf);
Jason Sams0826a6f2009-06-15 19:04:56 -070085 native private void nContextBindProgramVertex(int pf);
Jack Palevich60aa3ea2009-05-26 13:45:08 -070086
Jason Sams3eaa338e2009-06-10 15:04:38 -070087 native private void nAssignName(int obj, byte[] name);
Jason Sams64676f32009-07-08 18:01:53 -070088 native private int nFileOpen(byte[] name);
Jason Sams3eaa338e2009-06-10 15:04:38 -070089
Jack Palevich60aa3ea2009-05-26 13:45:08 -070090 native private void nElementBegin();
91 native private void nElementAddPredefined(int predef);
92 native private void nElementAdd(int kind, int type, int norm, int bits);
93 native private int nElementCreate();
94 native private int nElementGetPredefined(int predef);
95 native private void nElementDestroy(int obj);
96
97 native private void nTypeBegin(int elementID);
98 native private void nTypeAdd(int dim, int val);
99 native private int nTypeCreate();
100 native private void nTypeDestroy(int id);
101
102 native private int nAllocationCreateTyped(int type);
103 native private int nAllocationCreatePredefSized(int predef, int count);
104 native private int nAllocationCreateSized(int elem, int count);
Jason Samsffe9f482009-06-01 17:45:53 -0700105 native private int nAllocationCreateFromBitmap(int dstFmt, boolean genMips, Bitmap bmp);
Jason Samsb0ec1b42009-07-28 12:02:16 -0700106 native private int nAllocationCreateFromBitmapBoxed(int dstFmt, boolean genMips, Bitmap bmp);
Jason Samsfe08d992009-05-27 14:45:32 -0700107
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700108 native private void nAllocationUploadToTexture(int alloc, int baseMioLevel);
109 native private void nAllocationDestroy(int alloc);
110 native private void nAllocationData(int id, int[] d);
111 native private void nAllocationData(int id, float[] d);
112 native private void nAllocationSubData1D(int id, int off, int count, int[] d);
113 native private void nAllocationSubData1D(int id, int off, int count, float[] d);
114 native private void nAllocationSubData2D(int id, int xoff, int yoff, int w, int h, int[] d);
115 native private void nAllocationSubData2D(int id, int xoff, int yoff, int w, int h, float[] d);
116
117 native private void nTriangleMeshDestroy(int id);
118 native private void nTriangleMeshBegin(int vertex, int index);
119 native private void nTriangleMeshAddVertex_XY (float x, float y);
120 native private void nTriangleMeshAddVertex_XYZ (float x, float y, float z);
121 native private void nTriangleMeshAddVertex_XY_ST (float x, float y, float s, float t);
122 native private void nTriangleMeshAddVertex_XYZ_ST (float x, float y, float z, float s, float t);
Jason Sams0826a6f2009-06-15 19:04:56 -0700123 native private void nTriangleMeshAddVertex_XYZ_ST_NORM (float x, float y, float z, float s, float t, float nx, float ny, float nz);
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700124 native private void nTriangleMeshAddTriangle(int i1, int i2, int i3);
125 native private int nTriangleMeshCreate();
126
127 native private void nAdapter1DDestroy(int id);
128 native private void nAdapter1DBindAllocation(int ad, int alloc);
129 native private void nAdapter1DSetConstraint(int ad, int dim, int value);
130 native private void nAdapter1DData(int ad, int[] d);
131 native private void nAdapter1DSubData(int ad, int off, int count, int[] d);
132 native private void nAdapter1DData(int ad, float[] d);
133 native private void nAdapter1DSubData(int ad, int off, int count, float[] d);
134 native private int nAdapter1DCreate();
135
136 native private void nScriptDestroy(int script);
137 native private void nScriptBindAllocation(int vtm, int alloc, int slot);
138 native private void nScriptCBegin();
139 native private void nScriptCSetClearColor(float r, float g, float b, float a);
140 native private void nScriptCSetClearDepth(float depth);
141 native private void nScriptCSetClearStencil(int stencil);
142 native private void nScriptCAddType(int type);
143 native private void nScriptCSetRoot(boolean isRoot);
Jack Palevich43702d82009-05-28 13:38:16 -0700144 native private void nScriptCSetScript(byte[] script, int offset, int length);
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700145 native private int nScriptCCreate();
146
Jason Sams02fb2cb2009-05-28 15:37:57 -0700147 native private void nSamplerDestroy(int sampler);
148 native private void nSamplerBegin();
149 native private void nSamplerSet(int param, int value);
150 native private int nSamplerCreate();
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700151
152 native private void nProgramFragmentStoreBegin(int in, int out);
153 native private void nProgramFragmentStoreDepthFunc(int func);
154 native private void nProgramFragmentStoreDepthMask(boolean enable);
155 native private void nProgramFragmentStoreColorMask(boolean r, boolean g, boolean b, boolean a);
156 native private void nProgramFragmentStoreBlendFunc(int src, int dst);
157 native private void nProgramFragmentStoreDither(boolean enable);
158 native private int nProgramFragmentStoreCreate();
Jason Sams3eaa338e2009-06-10 15:04:38 -0700159 native private void nProgramFragmentStoreDestroy(int pgm);
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700160
161 native private void nProgramFragmentBegin(int in, int out);
162 native private void nProgramFragmentBindTexture(int vpf, int slot, int a);
163 native private void nProgramFragmentBindSampler(int vpf, int slot, int s);
164 native private void nProgramFragmentSetType(int slot, int vt);
165 native private void nProgramFragmentSetEnvMode(int slot, int env);
166 native private void nProgramFragmentSetTexEnable(int slot, boolean enable);
167 native private int nProgramFragmentCreate();
Jason Sams3eaa338e2009-06-10 15:04:38 -0700168 native private void nProgramFragmentDestroy(int pgm);
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700169
Jason Sams1fe9b8c2009-06-11 14:46:10 -0700170 native private void nProgramVertexDestroy(int pv);
171 native private void nProgramVertexBindAllocation(int pv, int slot, int mID);
172 native private void nProgramVertexBegin(int inID, int outID);
173 native private void nProgramVertexSetType(int slot, int mID);
Jason Sams1fe9b8c2009-06-11 14:46:10 -0700174 native private void nProgramVertexSetTextureMatrixEnable(boolean enable);
Jason Samsee411122009-07-21 12:20:54 -0700175 native private void nProgramVertexAddLight(int id);
Jason Sams1fe9b8c2009-06-11 14:46:10 -0700176 native private int nProgramVertexCreate();
177
Jason Samsbba134c2009-06-22 15:49:21 -0700178 native private void nLightBegin();
179 native private void nLightSetIsMono(boolean isMono);
180 native private void nLightSetIsLocal(boolean isLocal);
181 native private int nLightCreate();
182 native private void nLightDestroy(int l);
183 native private void nLightSetColor(int l, float r, float g, float b);
184 native private void nLightSetPosition(int l, float x, float y, float z);
185
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700186
187 private int mDev;
188 private int mContext;
189 private Surface mSurface;
190
191
192
193 ///////////////////////////////////////////////////////////////////////////////////
Jack Palevich43702d82009-05-28 13:38:16 -0700194 //
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700195
196 RenderScript(Surface sur) {
197 mSurface = sur;
198 mDev = nDeviceCreate();
199 mContext = nContextCreate(mDev, mSurface, 0);
200 }
201
202 private class BaseObj {
203 BaseObj() {
204 mID = 0;
205 }
206
Jason Sams94d8e90a2009-06-10 16:09:05 -0700207 public int getID() {
208 return mID;
209 }
210
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700211 int mID;
Jason Sams3eaa338e2009-06-10 15:04:38 -0700212 String mName;
213
214 public void setName(String s) throws IllegalStateException, IllegalArgumentException
215 {
216 if(s.length() < 1) {
217 throw new IllegalArgumentException("setName does not accept a zero length string.");
218 }
219 if(mName != null) {
220 throw new IllegalArgumentException("setName object already has a name.");
221 }
222
223 try {
224 byte[] bytes = s.getBytes("UTF-8");
225 nAssignName(mID, bytes);
226 mName = s;
227 } catch (java.io.UnsupportedEncodingException e) {
228 throw new RuntimeException(e);
229 }
230 }
231
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700232 protected void finalize() throws Throwable
233 {
234 if (mID != 0) {
Jack Palevich43702d82009-05-28 13:38:16 -0700235 Log.v(LOG_TAG,
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700236 "Element finalized without having released the RS reference.");
237 }
238 super.finalize();
239 }
240 }
241
Jack Palevich43702d82009-05-28 13:38:16 -0700242
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700243 //////////////////////////////////////////////////////////////////////////////////
244 // Element
245
246 public enum ElementPredefined {
247 USER_U8 (0),
248 USER_I8 (1),
249 USER_U16 (2),
250 USER_I16 (3),
251 USER_U32 (4),
252 USER_I32 (5),
253 USER_FLOAT (6),
254
Jason Samsffe9f482009-06-01 17:45:53 -0700255 A_8 (7),
256 RGB_565 (8),
Jason Sams0826a6f2009-06-15 19:04:56 -0700257 RGB_888 (11),
Jason Samsffe9f482009-06-01 17:45:53 -0700258 RGBA_5551 (9),
259 RGBA_4444 (10),
Jason Sams0826a6f2009-06-15 19:04:56 -0700260 RGBA_8888 (12),
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700261
Jason Sams0826a6f2009-06-15 19:04:56 -0700262 INDEX_16 (13),
263 INDEX_32 (14),
264 XY_F32 (15),
265 XYZ_F32 (16),
266 ST_XY_F32 (17),
267 ST_XYZ_F32 (18),
268 NORM_XYZ_F32 (19),
269 NORM_ST_XYZ_F32 (20);
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700270
271 int mID;
272 ElementPredefined(int id) {
273 mID = id;
274 }
275 }
276
277 public enum DataType {
278 FLOAT (0),
279 UNSIGNED (1),
280 SIGNED (2);
281
282 int mID;
283 DataType(int id) {
284 mID = id;
285 }
286 }
287
288 public enum DataKind {
289 USER (0),
290 RED (1),
291 GREEN (2),
292 BLUE (3),
293 ALPHA (4),
294 LUMINANCE (5),
295 INTENSITY (6),
296 X (7),
297 Y (8),
298 Z (9),
299 W (10),
300 S (11),
301 T (12),
302 Q (13),
303 R (14),
304 NX (15),
305 NY (16),
306 NZ (17),
307 INDEX (18);
308
309 int mID;
310 DataKind(int id) {
311 mID = id;
312 }
313 }
314
315 public enum DepthFunc {
316 ALWAYS (0),
317 LESS (1),
318 LEQUAL (2),
319 GREATER (3),
320 GEQUAL (4),
321 EQUAL (5),
322 NOTEQUAL (6);
323
324 int mID;
325 DepthFunc(int id) {
326 mID = id;
327 }
328 }
329
330 public enum BlendSrcFunc {
331 ZERO (0),
332 ONE (1),
333 DST_COLOR (2),
334 ONE_MINUS_DST_COLOR (3),
335 SRC_ALPHA (4),
336 ONE_MINUS_SRC_ALPHA (5),
337 DST_ALPHA (6),
338 ONE_MINUS_DST_ALPA (7),
339 SRC_ALPHA_SATURATE (8);
340
341 int mID;
342 BlendSrcFunc(int id) {
343 mID = id;
344 }
345 }
346
347 public enum BlendDstFunc {
348 ZERO (0),
349 ONE (1),
350 SRC_COLOR (2),
351 ONE_MINUS_SRC_COLOR (3),
352 SRC_ALPHA (4),
353 ONE_MINUS_SRC_ALPHA (5),
354 DST_ALPHA (6),
355 ONE_MINUS_DST_ALPA (7);
356
357 int mID;
358 BlendDstFunc(int id) {
359 mID = id;
360 }
361 }
362
363 public enum EnvMode {
364 REPLACE (0),
365 MODULATE (1),
366 DECAL (2);
367
368 int mID;
369 EnvMode(int id) {
370 mID = id;
371 }
372 }
373
Jason Sams02fb2cb2009-05-28 15:37:57 -0700374 public enum SamplerParam {
375 FILTER_MIN (0),
376 FILTER_MAG (1),
377 WRAP_MODE_S (2),
378 WRAP_MODE_T (3),
379 WRAP_MODE_R (4);
380
381 int mID;
382 SamplerParam(int id) {
383 mID = id;
384 }
385 }
386
387 public enum SamplerValue {
388 NEAREST (0),
389 LINEAR (1),
390 LINEAR_MIP_LINEAR (2),
391 WRAP (3),
392 CLAMP (4);
393
394 int mID;
395 SamplerValue(int id) {
396 mID = id;
397 }
398 }
399
400
401
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700402 public class Element extends BaseObj {
403 Element(int id) {
404 mID = id;
405 }
406
407 public void estroy() {
408 nElementDestroy(mID);
409 mID = 0;
410 }
411 }
412
413 public void elementBegin() {
414 nElementBegin();
415 }
416
417 public void elementAddPredefined(ElementPredefined e) {
418 nElementAddPredefined(e.mID);
419 }
420
421 public void elementAdd(DataType dt, DataKind dk, boolean isNormalized, int bits) {
422 int norm = 0;
423 if (isNormalized) {
424 norm = 1;
425 }
426 nElementAdd(dt.mID, dk.mID, norm, bits);
427 }
428
429 public Element elementCreate() {
430 int id = nElementCreate();
431 return new Element(id);
432 }
433
434 public Element elementGetPredefined(ElementPredefined predef) {
435 int id = nElementGetPredefined(predef.mID);
436 return new Element(id);
437 }
438
439
440 //////////////////////////////////////////////////////////////////////////////////
441 // Type
442
443 public enum Dimension {
444 X (0),
445 Y (1),
446 Z (2),
447 LOD (3),
448 FACE (4),
449 ARRAY_0 (100);
450
451 int mID;
452 Dimension(int id) {
453 mID = id;
454 }
455 }
456
457 public class Type extends BaseObj {
458 Type(int id) {
459 mID = id;
460 }
461
462 public void destroy() {
463 nTypeDestroy(mID);
464 mID = 0;
465 }
466 }
467
468 public void typeBegin(Element e) {
469 nTypeBegin(e.mID);
470 }
471
472 public void typeAdd(Dimension d, int value) {
473 nTypeAdd(d.mID, value);
474 }
475
476 public Type typeCreate() {
477 int id = nTypeCreate();
478 return new Type(id);
479 }
480
481
482 //////////////////////////////////////////////////////////////////////////////////
483 // Allocation
484
485 public class Allocation extends BaseObj {
486 Allocation(int id) {
487 mID = id;
488 }
489
490 public void uploadToTexture(int baseMipLevel) {
491 nAllocationUploadToTexture(mID, baseMipLevel);
492 }
493
494 public void destroy() {
495 nAllocationDestroy(mID);
496 mID = 0;
497 }
498
499 public void data(int[] d) {
500 nAllocationData(mID, d);
501 }
502
503 public void data(float[] d) {
504 nAllocationData(mID, d);
505 }
506
507 public void subData1D(int off, int count, int[] d) {
508 nAllocationSubData1D(mID, off, count, d);
509 }
510
511 public void subData1D(int off, int count, float[] d) {
512 nAllocationSubData1D(mID, off, count, d);
513 }
514
515 public void subData2D(int xoff, int yoff, int w, int h, int[] d) {
516 nAllocationSubData2D(mID, xoff, yoff, w, h, d);
517 }
518
519 public void subData2D(int xoff, int yoff, int w, int h, float[] d) {
520 nAllocationSubData2D(mID, xoff, yoff, w, h, d);
521 }
522 }
523
524 public Allocation allocationCreateTyped(Type type) {
525 int id = nAllocationCreateTyped(type.mID);
526 return new Allocation(id);
527 }
528
529 public Allocation allocationCreatePredefSized(ElementPredefined e, int count) {
530 int id = nAllocationCreatePredefSized(e.mID, count);
531 return new Allocation(id);
532 }
533
534 public Allocation allocationCreateSized(Element e, int count) {
535 int id = nAllocationCreateSized(e.mID, count);
536 return new Allocation(id);
537 }
538
Jason Samsfe08d992009-05-27 14:45:32 -0700539 public Allocation allocationCreateFromBitmap(Bitmap b, ElementPredefined dstFmt, boolean genMips) {
Jason Samsb0ec1b42009-07-28 12:02:16 -0700540 int id = nAllocationCreateFromBitmap(dstFmt.mID, genMips, b);
541 return new Allocation(id);
542 }
543
544 public Allocation allocationCreateFromBitmapBoxed(Bitmap b, ElementPredefined dstFmt, boolean genMips) {
545 int id = nAllocationCreateFromBitmapBoxed(dstFmt.mID, genMips, b);
Jason Samsfe08d992009-05-27 14:45:32 -0700546 return new Allocation(id);
547 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700548
Jason Samsdba3ba52009-07-30 14:56:12 -0700549 public Allocation allocationCreateFromBitmapResource(Resources res, int id, ElementPredefined internalElement, boolean genMips) {
550 Bitmap b = BitmapFactory.decodeResource(res, id, mBitmapOptions);
551 return allocationCreateFromBitmap(b, internalElement, genMips);
552 }
553
554 public Allocation allocationCreateFromBitmapResourceBoxed(Resources res, int id, ElementPredefined internalElement, boolean genMips) {
555 Bitmap b = BitmapFactory.decodeResource(res, id, mBitmapOptions);
556 return allocationCreateFromBitmapBoxed(b, internalElement, genMips);
557 }
558
559
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700560 //////////////////////////////////////////////////////////////////////////////////
561 // Adapter1D
562
563 public class Adapter1D extends BaseObj {
564 Adapter1D(int id) {
565 mID = id;
566 }
567
568 public void destroy() {
569 nAdapter1DDestroy(mID);
570 mID = 0;
571 }
572
573 public void bindAllocation(Allocation a) {
574 nAdapter1DBindAllocation(mID, a.mID);
575 }
576
577 public void setConstraint(Dimension dim, int value) {
578 nAdapter1DSetConstraint(mID, dim.mID, value);
579 }
580
581 public void data(int[] d) {
582 nAdapter1DData(mID, d);
583 }
584
585 public void subData(int off, int count, int[] d) {
586 nAdapter1DSubData(mID, off, count, d);
587 }
588
589 public void data(float[] d) {
590 nAdapter1DData(mID, d);
591 }
592
593 public void subData(int off, int count, float[] d) {
594 nAdapter1DSubData(mID, off, count, d);
595 }
596 }
597
598 public Adapter1D adapter1DCreate() {
599 int id = nAdapter1DCreate();
600 return new Adapter1D(id);
601 }
602
603
604 //////////////////////////////////////////////////////////////////////////////////
605 // Triangle Mesh
606
607 public class TriangleMesh extends BaseObj {
608 TriangleMesh(int id) {
609 mID = id;
610 }
611
612 public void destroy() {
613 nTriangleMeshDestroy(mID);
614 mID = 0;
615 }
616 }
617
618 public void triangleMeshBegin(Element vertex, Element index) {
619 nTriangleMeshBegin(vertex.mID, index.mID);
620 }
621
622 public void triangleMeshAddVertex_XY(float x, float y) {
623 nTriangleMeshAddVertex_XY(x, y);
624 }
625
626 public void triangleMeshAddVertex_XYZ(float x, float y, float z) {
627 nTriangleMeshAddVertex_XYZ(x, y, z);
628 }
629
630 public void triangleMeshAddVertex_XY_ST(float x, float y, float s, float t) {
631 nTriangleMeshAddVertex_XY_ST(x, y, s, t);
632 }
633
634 public void triangleMeshAddVertex_XYZ_ST(float x, float y, float z, float s, float t) {
635 nTriangleMeshAddVertex_XYZ_ST(x, y, z, s, t);
636 }
637
Jason Sams0826a6f2009-06-15 19:04:56 -0700638 public void triangleMeshAddVertex_XYZ_ST_NORM(float x, float y, float z, float s, float t, float nx, float ny, float nz) {
639 nTriangleMeshAddVertex_XYZ_ST_NORM(x, y, z, s, t, nx, ny, nz);
640 }
641
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700642 public void triangleMeshAddTriangle(int i1, int i2, int i3) {
643 nTriangleMeshAddTriangle(i1, i2, i3);
644 }
645
646 public TriangleMesh triangleMeshCreate() {
647 int id = nTriangleMeshCreate();
648 return new TriangleMesh(id);
649 }
650
651 //////////////////////////////////////////////////////////////////////////////////
652 // Script
653
654 public class Script extends BaseObj {
655 Script(int id) {
656 mID = id;
657 }
658
659 public void destroy() {
660 nScriptDestroy(mID);
661 mID = 0;
662 }
663
664 public void bindAllocation(Allocation va, int slot) {
665 nScriptBindAllocation(mID, va.mID, slot);
666 }
667 }
668
669 public void scriptCBegin() {
670 nScriptCBegin();
671 }
672
673 public void scriptCSetClearColor(float r, float g, float b, float a) {
674 nScriptCSetClearColor(r, g, b, a);
675 }
676
677 public void scriptCSetClearDepth(float d) {
678 nScriptCSetClearDepth(d);
679 }
680
681 public void scriptCSetClearStencil(int stencil) {
682 nScriptCSetClearStencil(stencil);
683 }
684
685 public void scriptCAddType(Type t) {
686 nScriptCAddType(t.mID);
687 }
688
689 public void scriptCSetRoot(boolean r) {
690 nScriptCSetRoot(r);
691 }
692
693 public void scriptCSetScript(String s) {
Jack Palevich43702d82009-05-28 13:38:16 -0700694 try {
Jack Palevich63975dd2009-05-28 15:34:15 -0700695 byte[] bytes = s.getBytes("UTF-8");
696 nScriptCSetScript(bytes, 0, bytes.length);
Jack Palevich43702d82009-05-28 13:38:16 -0700697 } catch (java.io.UnsupportedEncodingException e) {
698 throw new RuntimeException(e);
699 }
700 }
701
Jack Palevich43702d82009-05-28 13:38:16 -0700702 public void scriptCSetScript(Resources resources, int id) {
703 InputStream is = resources.openRawResource(id);
704 try {
705 try {
706 scriptCSetScript(is);
707 } finally {
708 is.close();
709 }
710 } catch(IOException e) {
711 throw new Resources.NotFoundException();
712 }
713 }
714
715 public void scriptCSetScript(InputStream is) throws IOException {
716 byte[] buf = new byte[1024];
717 int currentPos = 0;
718 while(true) {
719 int bytesLeft = buf.length - currentPos;
720 if (bytesLeft == 0) {
721 byte[] buf2 = new byte[buf.length * 2];
722 System.arraycopy(buf, 0, buf2, 0, buf.length);
723 buf = buf2;
724 bytesLeft = buf.length - currentPos;
725 }
726 int bytesRead = is.read(buf, currentPos, bytesLeft);
727 if (bytesRead <= 0) {
728 break;
729 }
730 currentPos += bytesRead;
731 }
732 nScriptCSetScript(buf, 0, currentPos);
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700733 }
734
735 public Script scriptCCreate() {
736 int id = nScriptCCreate();
737 return new Script(id);
738 }
739
740 //////////////////////////////////////////////////////////////////////////////////
Jason Sams1fe9b8c2009-06-11 14:46:10 -0700741 // ProgramVertex
742
743 public class ProgramVertex extends BaseObj {
744 ProgramVertex(int id) {
745 mID = id;
746 }
747
748 public void destroy() {
749 nProgramVertexDestroy(mID);
750 mID = 0;
751 }
752
753 public void bindAllocation(int slot, Allocation va) {
754 nProgramVertexBindAllocation(mID, slot, va.mID);
755 }
Jason Sams1fe9b8c2009-06-11 14:46:10 -0700756 }
757
758 public void programVertexBegin(Element in, Element out) {
759 int inID = 0;
760 int outID = 0;
761 if (in != null) {
762 inID = in.mID;
763 }
764 if (out != null) {
765 outID = out.mID;
766 }
767 nProgramVertexBegin(inID, outID);
768 }
769
770 public void programVertexSetType(int slot, Type t) {
771 nProgramVertexSetType(slot, t.mID);
772 }
773
Jason Sams1fe9b8c2009-06-11 14:46:10 -0700774 public void programVertexSetTextureMatrixEnable(boolean enable) {
775 nProgramVertexSetTextureMatrixEnable(enable);
776 }
777
Jason Samsee411122009-07-21 12:20:54 -0700778 public void programVertexAddLight(Light l) {
779 nProgramVertexAddLight(l.mID);
780 }
781
Jason Sams1fe9b8c2009-06-11 14:46:10 -0700782 public ProgramVertex programVertexCreate() {
783 int id = nProgramVertexCreate();
784 return new ProgramVertex(id);
785 }
786
787
788 //////////////////////////////////////////////////////////////////////////////////
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700789 // ProgramFragmentStore
790
791 public class ProgramFragmentStore extends BaseObj {
792 ProgramFragmentStore(int id) {
793 mID = id;
794 }
795
796 public void destroy() {
Jason Sams3eaa338e2009-06-10 15:04:38 -0700797 nProgramFragmentStoreDestroy(mID);
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700798 mID = 0;
799 }
800 }
801
802 public void programFragmentStoreBegin(Element in, Element out) {
803 int inID = 0;
804 int outID = 0;
805 if (in != null) {
806 inID = in.mID;
807 }
808 if (out != null) {
809 outID = out.mID;
810 }
811 nProgramFragmentStoreBegin(inID, outID);
812 }
813
814 public void programFragmentStoreDepthFunc(DepthFunc func) {
815 nProgramFragmentStoreDepthFunc(func.mID);
816 }
817
818 public void programFragmentStoreDepthMask(boolean enable) {
819 nProgramFragmentStoreDepthMask(enable);
820 }
821
822 public void programFragmentStoreColorMask(boolean r, boolean g, boolean b, boolean a) {
823 nProgramFragmentStoreColorMask(r,g,b,a);
824 }
825
826 public void programFragmentStoreBlendFunc(BlendSrcFunc src, BlendDstFunc dst) {
827 nProgramFragmentStoreBlendFunc(src.mID, dst.mID);
828 }
829
830 public void programFragmentStoreDitherEnable(boolean enable) {
831 nProgramFragmentStoreDither(enable);
832 }
833
834 public ProgramFragmentStore programFragmentStoreCreate() {
835 int id = nProgramFragmentStoreCreate();
836 return new ProgramFragmentStore(id);
837 }
838
839 //////////////////////////////////////////////////////////////////////////////////
840 // ProgramFragment
841
842 public class ProgramFragment extends BaseObj {
843 ProgramFragment(int id) {
844 mID = id;
845 }
846
847 public void destroy() {
Jason Sams3eaa338e2009-06-10 15:04:38 -0700848 nProgramFragmentDestroy(mID);
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700849 mID = 0;
850 }
851
852 public void bindTexture(Allocation va, int slot) {
853 nProgramFragmentBindTexture(mID, slot, va.mID);
854 }
855
Jason Sams02fb2cb2009-05-28 15:37:57 -0700856 public void bindSampler(Sampler vs, int slot) {
857 nProgramFragmentBindSampler(mID, slot, vs.mID);
858 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700859 }
860
861 public void programFragmentBegin(Element in, Element out) {
862 int inID = 0;
863 int outID = 0;
864 if (in != null) {
865 inID = in.mID;
866 }
867 if (out != null) {
868 outID = out.mID;
869 }
870 nProgramFragmentBegin(inID, outID);
871 }
872
873 public void programFragmentSetType(int slot, Type t) {
874 nProgramFragmentSetType(slot, t.mID);
875 }
876
877 public void programFragmentSetType(int slot, EnvMode t) {
878 nProgramFragmentSetEnvMode(slot, t.mID);
879 }
880
881 public void programFragmentSetTexEnable(int slot, boolean enable) {
882 nProgramFragmentSetTexEnable(slot, enable);
883 }
884
Jason Samse6c8e9b2009-07-17 17:29:09 -0700885 public void programFragmentSetTexEnvMode(int slot, EnvMode env) {
886 nProgramFragmentSetEnvMode(slot, env.mID);
887 }
888
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700889 public ProgramFragment programFragmentCreate() {
890 int id = nProgramFragmentCreate();
891 return new ProgramFragment(id);
892 }
893
Jason Sams02fb2cb2009-05-28 15:37:57 -0700894 //////////////////////////////////////////////////////////////////////////////////
895 // Sampler
896
897 public class Sampler extends BaseObj {
898 Sampler(int id) {
899 mID = id;
900 }
901
902 public void destroy() {
903 nSamplerDestroy(mID);
904 mID = 0;
905 }
906 }
907
908 public void samplerBegin() {
909 nSamplerBegin();
910 }
911
912 public void samplerSet(SamplerParam p, SamplerValue v) {
913 nSamplerSet(p.mID, v.mID);
914 }
915
916 public Sampler samplerCreate() {
917 int id = nSamplerCreate();
918 return new Sampler(id);
919 }
920
Jason Samsbba134c2009-06-22 15:49:21 -0700921 //////////////////////////////////////////////////////////////////////////////////
922 // Light
923
924 public class Light extends BaseObj {
925 Light(int id) {
926 mID = id;
927 }
928
929 public void destroy() {
930 nLightDestroy(mID);
931 mID = 0;
932 }
933
934 public void setColor(float r, float g, float b) {
935 nLightSetColor(mID, r, g, b);
936 }
937
938 public void setPosition(float x, float y, float z) {
939 nLightSetPosition(mID, x, y, z);
940 }
941 }
942
943 public void lightBegin() {
944 nLightBegin();
945 }
946
947 public void lightSetIsMono(boolean isMono) {
948 nLightSetIsMono(isMono);
949 }
950
951 public void lightSetIsLocal(boolean isLocal) {
952 nLightSetIsLocal(isLocal);
953 }
954
955 public Light lightCreate() {
956 int id = nLightCreate();
957 return new Light(id);
958 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700959
Jason Sams64676f32009-07-08 18:01:53 -0700960 //////////////////////////////////////////////////////////////////////////////////
961 // File
962
963 public class File extends BaseObj {
964 File(int id) {
965 mID = id;
966 }
967
968 public void destroy() {
969 //nLightDestroy(mID);
970 mID = 0;
971 }
972 }
973
974 public File fileOpen(String s) throws IllegalStateException, IllegalArgumentException
975 {
976 if(s.length() < 1) {
977 throw new IllegalArgumentException("fileOpen does not accept a zero length string.");
978 }
979
980 try {
981 byte[] bytes = s.getBytes("UTF-8");
982 int id = nFileOpen(bytes);
983 return new File(id);
984 } catch (java.io.UnsupportedEncodingException e) {
985 throw new RuntimeException(e);
986 }
987 }
988
989
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700990 ///////////////////////////////////////////////////////////////////////////////////
991 // Root state
992
993 public void contextBindRootScript(Script s) {
994 nContextBindRootScript(s.mID);
995 }
996
997 //public void contextBindSampler(Sampler s, int slot) {
998 //nContextBindSampler(s.mID);
999 //}
1000
1001 public void contextBindProgramFragmentStore(ProgramFragmentStore pfs) {
1002 nContextBindProgramFragmentStore(pfs.mID);
1003 }
1004
1005 public void contextBindProgramFragment(ProgramFragment pf) {
1006 nContextBindProgramFragment(pf.mID);
1007 }
1008
Jason Sams0826a6f2009-06-15 19:04:56 -07001009 public void contextBindProgramVertex(ProgramVertex pf) {
1010 nContextBindProgramVertex(pf.mID);
1011 }
1012
Jack Palevich60aa3ea2009-05-26 13:45:08 -07001013/*
1014 RsAdapter2D rsAdapter2DCreate ();
1015 void rsAdapter2DBindAllocation (RsAdapter2D adapt, RsAllocation alloc);
1016 void rsAdapter2DDestroy (RsAdapter2D adapter);
1017 void rsAdapter2DSetConstraint (RsAdapter2D adapter, RsDimension dim, uint32_t value);
1018 void rsAdapter2DData (RsAdapter2D adapter, const void * data);
1019 void rsAdapter2DSubData (RsAdapter2D adapter, uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h, const void * data);
1020 void rsSamplerBegin ();
1021 void rsSamplerSet (RsSamplerParam p, RsSamplerValue value);
1022 RsSampler rsSamplerCreate ();
1023 void rsSamplerBind (RsSampler sampler, RsAllocation alloc);
1024*/
1025
1026}
1027