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