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