1/* 2 * Copyright (C) 2013 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 17package android.support.v8.renderscript; 18 19import java.lang.reflect.Field; 20 21import android.util.Log; 22 23class ElementThunker extends Element { 24 android.renderscript.Element mN; 25 26 android.renderscript.Element getNObj() { 27 return mN; 28 } 29 30 public int getBytesSize() { 31 try { 32 return mN.getBytesSize(); 33 } catch (android.renderscript.RSRuntimeException e) { 34 throw ExceptionThunker.convertException(e); 35 } 36 } 37 38 public int getVectorSize() { 39 try { 40 return mN.getVectorSize(); 41 } catch (android.renderscript.RSRuntimeException e) { 42 throw ExceptionThunker.convertException(e); 43 } 44 } 45 46 static android.renderscript.Element.DataKind convertKind(DataKind cdk) { 47 switch(cdk) { 48 case USER: 49 return android.renderscript.Element.DataKind.USER; 50 case PIXEL_L: 51 return android.renderscript.Element.DataKind.PIXEL_L; 52 case PIXEL_A: 53 return android.renderscript.Element.DataKind.PIXEL_A; 54 case PIXEL_LA: 55 return android.renderscript.Element.DataKind.PIXEL_LA; 56 case PIXEL_RGB: 57 return android.renderscript.Element.DataKind.PIXEL_RGB; 58 case PIXEL_RGBA: 59 return android.renderscript.Element.DataKind.PIXEL_RGBA; 60 } 61 return null; 62 } 63 64 static android.renderscript.Element.DataType convertType(DataType cdt) { 65 switch(cdt) { 66 case NONE: 67 return android.renderscript.Element.DataType.NONE; 68 //case DataType.FLOAT_16: 69 case FLOAT_32: 70 return android.renderscript.Element.DataType.FLOAT_32; 71 case FLOAT_64: 72 return android.renderscript.Element.DataType.FLOAT_64; 73 case SIGNED_8: 74 return android.renderscript.Element.DataType.SIGNED_8; 75 case SIGNED_16: 76 return android.renderscript.Element.DataType.SIGNED_16; 77 case SIGNED_32: 78 return android.renderscript.Element.DataType.SIGNED_32; 79 case SIGNED_64: 80 return android.renderscript.Element.DataType.SIGNED_64; 81 case UNSIGNED_8: 82 return android.renderscript.Element.DataType.UNSIGNED_8; 83 case UNSIGNED_16: 84 return android.renderscript.Element.DataType.UNSIGNED_16; 85 case UNSIGNED_32: 86 return android.renderscript.Element.DataType.UNSIGNED_32; 87 case UNSIGNED_64: 88 return android.renderscript.Element.DataType.UNSIGNED_64; 89 90 case BOOLEAN: 91 return android.renderscript.Element.DataType.BOOLEAN; 92 93 case MATRIX_4X4: 94 return android.renderscript.Element.DataType.MATRIX_4X4; 95 case MATRIX_3X3: 96 return android.renderscript.Element.DataType.MATRIX_3X3; 97 case MATRIX_2X2: 98 return android.renderscript.Element.DataType.MATRIX_2X2; 99 100 case RS_ELEMENT: 101 return android.renderscript.Element.DataType.RS_ELEMENT; 102 case RS_TYPE: 103 return android.renderscript.Element.DataType.RS_TYPE; 104 case RS_ALLOCATION: 105 return android.renderscript.Element.DataType.RS_ALLOCATION; 106 case RS_SAMPLER: 107 return android.renderscript.Element.DataType.RS_SAMPLER; 108 case RS_SCRIPT: 109 return android.renderscript.Element.DataType.RS_SCRIPT; 110 } 111 return null; 112 } 113 114 public boolean isComplex() { 115 try { 116 return mN.isComplex(); 117 } catch (android.renderscript.RSRuntimeException e) { 118 throw ExceptionThunker.convertException(e); 119 } 120 } 121 122 public int getSubElementCount() { 123 try { 124 return mN.getSubElementCount(); 125 } catch (android.renderscript.RSRuntimeException e) { 126 throw ExceptionThunker.convertException(e); 127 } 128 } 129 130 public Element getSubElement(int index) { 131 try { 132 return new ElementThunker(mRS, mN.getSubElement(index)); 133 } catch (android.renderscript.RSRuntimeException e) { 134 throw ExceptionThunker.convertException(e); 135 } 136 } 137 138 public String getSubElementName(int index) { 139 try { 140 return mN.getSubElementName(index); 141 } catch (android.renderscript.RSRuntimeException e) { 142 throw ExceptionThunker.convertException(e); 143 } 144 } 145 146 public int getSubElementArraySize(int index) { 147 try { 148 return mN.getSubElementArraySize(index); 149 } catch (android.renderscript.RSRuntimeException e) { 150 throw ExceptionThunker.convertException(e); 151 } 152 } 153 154 public int getSubElementOffsetBytes(int index) { 155 try { 156 return mN.getSubElementOffsetBytes(index); 157 } catch (android.renderscript.RSRuntimeException e) { 158 throw ExceptionThunker.convertException(e); 159 } 160 } 161 162 public DataType getDataType() { 163 return mType; 164 } 165 166 public DataKind getDataKind() { 167 return mKind; 168 } 169 170 171 ElementThunker(RenderScript rs, android.renderscript.Element e) { 172 super(0, rs); 173 mN = e; 174 } 175 176 177 static Element create(RenderScript rs, DataType dt) { 178 RenderScriptThunker rst = (RenderScriptThunker)rs; 179 try { 180 android.renderscript.Element e = null; 181 switch(dt) { 182 case FLOAT_32: 183 e = android.renderscript.Element.F32(rst.mN); 184 break; 185 case FLOAT_64: 186 e = android.renderscript.Element.F64(rst.mN); 187 break; 188 case SIGNED_8: 189 e = android.renderscript.Element.I8(rst.mN); 190 break; 191 case SIGNED_16: 192 e = android.renderscript.Element.I16(rst.mN); 193 break; 194 case SIGNED_32: 195 e = android.renderscript.Element.I32(rst.mN); 196 break; 197 case SIGNED_64: 198 e = android.renderscript.Element.I64(rst.mN); 199 break; 200 case UNSIGNED_8: 201 e = android.renderscript.Element.U8(rst.mN); 202 break; 203 case UNSIGNED_16: 204 e = android.renderscript.Element.U16(rst.mN); 205 break; 206 case UNSIGNED_32: 207 e = android.renderscript.Element.U32(rst.mN); 208 break; 209 case UNSIGNED_64: 210 e = android.renderscript.Element.U64(rst.mN); 211 break; 212 213 case BOOLEAN: 214 e = android.renderscript.Element.BOOLEAN(rst.mN); 215 break; 216 217 case MATRIX_4X4: 218 e = android.renderscript.Element.MATRIX_4X4(rst.mN); 219 break; 220 case MATRIX_3X3: 221 e = android.renderscript.Element.MATRIX_3X3(rst.mN); 222 break; 223 case MATRIX_2X2: 224 e = android.renderscript.Element.MATRIX_2X2(rst.mN); 225 break; 226 227 case RS_ELEMENT: 228 e = android.renderscript.Element.ELEMENT(rst.mN); 229 break; 230 case RS_TYPE: 231 e = android.renderscript.Element.TYPE(rst.mN); 232 break; 233 case RS_ALLOCATION: 234 e = android.renderscript.Element.ALLOCATION(rst.mN); 235 break; 236 case RS_SAMPLER: 237 e = android.renderscript.Element.SAMPLER(rst.mN); 238 break; 239 case RS_SCRIPT: 240 e = android.renderscript.Element.SCRIPT(rst.mN); 241 break; 242 } 243 244 return new ElementThunker(rs, e); 245 } catch (android.renderscript.RSRuntimeException e) { 246 throw ExceptionThunker.convertException(e); 247 } 248 } 249 250 public static Element createVector(RenderScript rs, DataType dt, int size) { 251 RenderScriptThunker rst = (RenderScriptThunker)rs; 252 android.renderscript.Element e; 253 try { 254 e = android.renderscript.Element.createVector(rst.mN, convertType(dt), size); 255 return new ElementThunker(rs, e); 256 } catch (android.renderscript.RSRuntimeException exc) { 257 throw ExceptionThunker.convertException(exc); 258 } 259 } 260 261 public static Element createPixel(RenderScript rs, DataType dt, DataKind dk) { 262 RenderScriptThunker rst = (RenderScriptThunker)rs; 263 android.renderscript.Element e; 264 try { 265 e = android.renderscript.Element.createPixel(rst.mN, convertType(dt), convertKind(dk)); 266 return new ElementThunker(rs, e); 267 } catch (android.renderscript.RSRuntimeException exc) { 268 throw ExceptionThunker.convertException(exc); 269 } 270 } 271 272 public boolean isCompatible(Element e) { 273 ElementThunker et = (ElementThunker)e; 274 try { 275 return et.mN.isCompatible(mN); 276 } catch (android.renderscript.RSRuntimeException exc) { 277 throw ExceptionThunker.convertException(exc); 278 } 279 } 280 281 static class BuilderThunker { 282 android.renderscript.Element.Builder mN; 283 284 public BuilderThunker(RenderScript rs) { 285 RenderScriptThunker rst = (RenderScriptThunker)rs; 286 try { 287 mN = new android.renderscript.Element.Builder(rst.mN); 288 } catch (android.renderscript.RSRuntimeException e) { 289 throw ExceptionThunker.convertException(e); 290 } 291 } 292 293 public void add(Element e, String name, int arraySize) { 294 ElementThunker et = (ElementThunker)e; 295 try { 296 mN.add(et.mN, name, arraySize); 297 } catch (android.renderscript.RSRuntimeException exc) { 298 throw ExceptionThunker.convertException(exc); 299 } 300 } 301 302 public Element create(RenderScript rs) { 303 try { 304 android.renderscript.Element e = mN.create(); 305 return new ElementThunker(rs, e); 306 } catch (android.renderscript.RSRuntimeException exc) { 307 throw ExceptionThunker.convertException(exc); 308 } 309 } 310 } 311} 312 313 314