198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams/*
298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Copyright (C) 2012 The Android Open Source Project
398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams *
498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Licensed under the Apache License, Version 2.0 (the "License");
598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * you may not use this file except in compliance with the License.
698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * You may obtain a copy of the License at
798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams *
898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams *      http://www.apache.org/licenses/LICENSE-2.0
998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams *
1098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Unless required by applicable law or agreed to in writing, software
1198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * distributed under the License is distributed on an "AS IS" BASIS,
1298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * See the License for the specific language governing permissions and
1498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * limitations under the License.
1598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */
1698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
1798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Samspackage android.renderscript;
1898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
1998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
2098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Samsimport java.lang.reflect.Field;
2198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Samsimport java.lang.Class;
2298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Samsimport java.lang.reflect.Method;
2398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Samsimport java.lang.reflect.Constructor;
2498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
2598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Samsimport android.util.Log;
2698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
2798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Samsclass RSReflect {
2898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    Class mElement;
2998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    Class mElementBuilder;
3098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    Class mElementDataType;
3198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    Class mElementDataKind;
3298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    Method mElement_createUser;
3398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    Method mElement_createVector;
3498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    Method mElement_createPixel;
3598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    Constructor mElementBuilder_constructor;
3698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    Method mElementBuilder_add;
3798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    Method mElementBuilder_create;
3898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
3998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    Class mType;
4098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    Class mTypeBuilder;
4198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    Class mTypeCubemapFace;
4298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    Constructor mTypeBuilder_constructor;
4398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    Method mTypeBuilder_setX;
4498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    Method mTypeBuilder_setY;
4598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    Method mTypeBuilder_setMipmaps;
4698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    Method mTypeBuilder_setFaces;
4798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
4898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    Class mAllocation;
4998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    Class mAllocationMipmapControl;
5098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    Method mAllocation_syncAll;
5198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    Method mAllocation_copyFrom_O;
5298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    Method mAllocation_copyFromUnchecked_I;
5398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    Method mAllocation_copyFromUnchecked_S;
5498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    Method mAllocation_copyFromUnchecked_B;
5598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    Method mAllocation_copyFromUnchecked_F;
5698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    Method mAllocation_copyFrom_I;
5798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    Method mAllocation_copyFrom_S;
5898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    Method mAllocation_copyFrom_B;
5998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    Method mAllocation_copyFrom_F;
6098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    Method mAllocation_setFromFieldPacker;
6198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    Method mAllocation_setFromFieldPacker_component;
6298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    Method mAllocation_generateMipmaps;
6398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    Method mAllocation_copy1DRangeFromUnchecked;
6498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
6598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
6698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    Class mBaseObj;
6798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    Class mRenderScript;
6898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    Class mSampler;
6998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    Class mScript;
7098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    Class mScriptC;
7198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    Class mScriptGroup;
7298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
7398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
7498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    private RSReflect() {
7598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
7698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
7798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    private boolean init() {
7898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        try {
7998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            Method m[];
8098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
8198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            mElement = Class.forName("android.renderscript.Element");
8298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            mElementBuilder = Class.forName("android.renderscript.Element$Builder");
8398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            mElementDataType = Class.forName("android.renderscript.Element$DataType");
8498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            mElementDataKind = Class.forName("android.renderscript.Element$DataKind");
8598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
8698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            mType = Class.forName("android.renderscript.Type");
8798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            mTypeBuilder = Class.forName("android.renderscript.Type$Builder");
8898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            mTypeCubemapFace = Class.forName("android.renderscript.Type$CubemapFace");
8998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
9098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            mAllocation = Class.forName("android.renderscript.Allocation");
9198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            mBaseObj = Class.forName("android.renderscript.BaseObj");
9298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            mRenderScript = Class.forName("android.renderscript.RenderScript");
9398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            mSampler = Class.forName("android.renderscript.Sampler");
9498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            mScript = Class.forName("android.renderscript.Script");
9598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            mScriptC = Class.forName("android.renderscript.ScriptC");
9698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
9798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            mElement_createUser = mElement.getDeclaredMethod("createUser",
9898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams                        new Class[] { mRenderScript, mElementDataType });
9998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            mElement_createVector = mElement.getDeclaredMethod("createVector",
10098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams                        new Class[] { mRenderScript, mElementDataType, Integer.TYPE });
10198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            mElement_createPixel = mElement.getDeclaredMethod("createPixel",
10298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams                        new Class[] { mRenderScript, mElementDataType, mElementDataKind });
10398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            mElementBuilder_constructor = mElementBuilder.getDeclaredConstructor(
10498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams                            new Class[] { mRenderScript });
10598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            mElementBuilder_add = mElementBuilder.getDeclaredMethod("add",
10698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams                            new Class[] { mElement, String.class, Integer.TYPE });
10798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            mElementBuilder_create = mElementBuilder.getDeclaredMethod("create",
10898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams                            new Class[] {});
10998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
11098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            mTypeBuilder_constructor = mTypeBuilder.getDeclaredConstructor(
11198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams                            new Class[] { mRenderScript, mElement });
11298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            mTypeBuilder_setX = mTypeBuilder.getDeclaredMethod("setX",
11398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams                            new Class[] { Integer.TYPE });
11498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            mTypeBuilder_setY = mTypeBuilder.getDeclaredMethod("setY",
11598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams                            new Class[] { Integer.TYPE });
11698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            mTypeBuilder_setMipmaps = mTypeBuilder.getDeclaredMethod("setMipmaps",
11798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams                            new Class[] { Boolean.TYPE });
11898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            mTypeBuilder_setFaces = mTypeBuilder.getDeclaredMethod("setFaces",
11998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams                            new Class[] { Boolean.TYPE });
12098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
12198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
12298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
12398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
12498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
12598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            //mScriptGroup = Class.forName("android.renderscript.Element");
12698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
12798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
12898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        } catch (Throwable e) {
12998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            android.util.Log.w("RSR", "Using native RS failed. " + e);
13098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            return false;
13198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        }
13298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        return true;
13398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
13498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
13598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    static RSReflect create() {
13698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        android.util.Log.v("RSR", "create");
13798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        RSReflect r = new RSReflect();
13898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        if (r.init()) {
13998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            android.util.Log.v("RSR", "create ok");
14098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            return r;
14198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        }
14298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        android.util.Log.v("RSR", "create fail");
14398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        return null;
14498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
14598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
14698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    private Method findMethod(Method m[], String name) {
14798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        for (int ct=0; ct < m.length; ct++) {
14898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            if (m[ct].getName().equals(name)) {
14998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams                return m[ct];
15098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            }
15198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        }
15298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        return null;
15398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
15498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
15598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
15698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    //Class c = Class.forName("java.lang.String");
15798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
15898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams}
159