summaryrefslogtreecommitdiff
path: root/graphics/java/android/renderscript/Element.java
diff options
context:
space:
mode:
authorJason Sams <rjsams@android.com>2009-07-31 16:26:13 -0700
committerJason Sams <rjsams@android.com>2009-07-31 16:26:13 -0700
commit36e612a488511940b61f09803b270aa1c61b68e0 (patch)
treed127d889ee21474d6fb845a190c87fb12eab2eca /graphics/java/android/renderscript/Element.java
parentb5a57ad94388ebcd3717a6970a12449055eadabe (diff)
Begin splitting up RenderScript.java into seperate classes. First piece split off Element.
Diffstat (limited to 'graphics/java/android/renderscript/Element.java')
-rw-r--r--graphics/java/android/renderscript/Element.java205
1 files changed, 205 insertions, 0 deletions
diff --git a/graphics/java/android/renderscript/Element.java b/graphics/java/android/renderscript/Element.java
new file mode 100644
index 000000000000..8e0a7a11fac7
--- /dev/null
+++ b/graphics/java/android/renderscript/Element.java
@@ -0,0 +1,205 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.renderscript;
+
+
+/**
+ * @hide
+ *
+ **/
+public class Element extends BaseObj {
+ final int mPredefinedID;
+ final boolean mIsPredefined;
+
+ public static final Element USER_U8 = new Element(0);
+ public static final Element USER_I8 = new Element(1);
+ public static final Element USER_U16 = new Element(2);
+ public static final Element USER_I16 = new Element(3);
+ public static final Element USER_U32 = new Element(4);
+ public static final Element USER_I32 = new Element(5);
+ public static final Element USER_FLOAT = new Element(6);
+
+ public static final Element A_8 = new Element(7);
+ public static final Element RGB_565 = new Element(8);
+ public static final Element RGB_888 = new Element(11);
+ public static final Element RGBA_5551 = new Element(9);
+ public static final Element RGBA_4444 = new Element(10);
+ public static final Element RGBA_8888 = new Element(12);
+
+ public static final Element INDEX_16 = new Element(13);
+ public static final Element INDEX_32 = new Element(14);
+ public static final Element XY_F32 = new Element(15);
+ public static final Element XYZ_F32 = new Element(16);
+ public static final Element ST_XY_F32 = new Element(17);
+ public static final Element ST_XYZ_F32 = new Element(18);
+ public static final Element NORM_XYZ_F32 = new Element(19);
+ public static final Element NORM_ST_XYZ_F32 = new Element(20);
+
+ void initPredef(RenderScript rs) {
+ mID = rs.nElementGetPredefined(mPredefinedID);
+ }
+
+ static void init(RenderScript rs) {
+ USER_U8.initPredef(rs);
+ USER_I8.initPredef(rs);
+ USER_U16.initPredef(rs);
+ USER_I16.initPredef(rs);
+ USER_U32.initPredef(rs);
+ USER_I32.initPredef(rs);
+ USER_FLOAT.initPredef(rs);
+
+ A_8.initPredef(rs);
+ RGB_565.initPredef(rs);
+ RGB_888.initPredef(rs);
+ RGBA_5551.initPredef(rs);
+ RGBA_4444.initPredef(rs);
+ RGBA_8888.initPredef(rs);
+
+ INDEX_16.initPredef(rs);
+ INDEX_32.initPredef(rs);
+ XY_F32.initPredef(rs);
+ XYZ_F32.initPredef(rs);
+ ST_XY_F32.initPredef(rs);
+ ST_XYZ_F32.initPredef(rs);
+ NORM_XYZ_F32.initPredef(rs);
+ NORM_ST_XYZ_F32.initPredef(rs);
+ }
+
+
+ public enum DataType {
+ FLOAT (0),
+ UNSIGNED (1),
+ SIGNED (2);
+
+ int mID;
+ DataType(int id) {
+ mID = id;
+ }
+ }
+
+ public enum DataKind {
+ USER (0),
+ RED (1),
+ GREEN (2),
+ BLUE (3),
+ ALPHA (4),
+ LUMINANCE (5),
+ INTENSITY (6),
+ X (7),
+ Y (8),
+ Z (9),
+ W (10),
+ S (11),
+ T (12),
+ Q (13),
+ R (14),
+ NX (15),
+ NY (16),
+ NZ (17),
+ INDEX (18);
+
+ int mID;
+ DataKind(int id) {
+ mID = id;
+ }
+ }
+
+
+ Element(int predef) {
+ super(null);
+ mID = 0;
+ mPredefinedID = predef;
+ mIsPredefined = true;
+ }
+
+ Element(int id, RenderScript rs) {
+ super(rs);
+ mID = id;
+ mPredefinedID = 0;
+ mIsPredefined = false;
+ }
+
+ public void destroy() throws IllegalStateException {
+ if(mIsPredefined) {
+ throw new IllegalStateException("Attempting to destroy a predefined Element.");
+ }
+ mRS.nElementDestroy(mID);
+ mID = 0;
+ }
+
+
+
+
+ public static class Builder {
+ RenderScript mRS;
+ boolean mActive = true;
+
+ Builder(RenderScript rs) {
+ mRS = rs;
+ }
+
+ void begin() throws IllegalStateException {
+ if (mActive) {
+ throw new IllegalStateException("Element builder already active.");
+ }
+ mRS.nElementBegin();
+ mActive = true;
+ }
+
+ public Builder add(Element e) throws IllegalArgumentException, IllegalStateException {
+ if(!mActive) {
+ throw new IllegalStateException("Element builder not active.");
+ }
+ if(!e.mIsPredefined) {
+ throw new IllegalArgumentException("add requires a predefined Element.");
+ }
+ mRS.nElementAddPredefined(e.mID);
+ return this;
+ }
+
+ public Builder add(Element.DataType dt, Element.DataKind dk, boolean isNormalized, int bits)
+ throws IllegalStateException {
+ if(!mActive) {
+ throw new IllegalStateException("Element builder not active.");
+ }
+ int norm = 0;
+ if (isNormalized) {
+ norm = 1;
+ }
+ mRS.nElementAdd(dt.mID, dk.mID, norm, bits);
+ return this;
+ }
+
+ public void abort() throws IllegalStateException {
+ if(!mActive) {
+ throw new IllegalStateException("Element builder not active.");
+ }
+ mActive = false;
+ }
+
+ public Element create() throws IllegalStateException {
+ if(!mActive) {
+ throw new IllegalStateException("Element builder not active.");
+ }
+ int id = mRS.nElementCreate();
+ mActive = false;
+ return new Element(id, mRS);
+ }
+ }
+
+}
+