169f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams/* 269f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams * Copyright (C) 2008 The Android Open Source Project 369f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams * 469f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 569f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams * you may not use this file except in compliance with the License. 669f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams * You may obtain a copy of the License at 769f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams * 869f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams * http://www.apache.org/licenses/LICENSE-2.0 969f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams * 1069f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams * Unless required by applicable law or agreed to in writing, software 1169f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams * distributed under the License is distributed on an "AS IS" BASIS, 1269f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1369f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams * See the License for the specific language governing permissions and 1469f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams * limitations under the License. 1569f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams */ 1669f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams 1769f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Samspackage android.renderscript; 1869f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams 1969f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams/** 2069f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams * @hide 2169f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams **/ 2269f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Samspublic class Script extends BaseObj { 23fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams public static final int MAX_SLOT = 16; 24fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams 2569f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams boolean mIsRoot; 2643ee06857bb7f99446d1d84f8789016c5d105558Jason Sams Type[] mTypes; 27334ea0c98f051b5a6b85bc616c93304651854298Jason Sams boolean[] mWritable; 28be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams Invokable[] mInvokables; 29be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams 30be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams public static class Invokable { 31be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams RenderScript mRS; 32be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams Script mScript; 33be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams int mSlot; 34be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams String mName; 35be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams 36be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams Invokable() { 37be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams mSlot = -1; 38be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams } 39be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams 40be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams public void execute() { 41be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams mRS.nScriptInvoke(mScript.mID, mSlot); 42be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams } 43be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams } 4469f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams 4569f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams Script(int id, RenderScript rs) { 4669f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams super(rs); 4769f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams mID = id; 4869f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams } 4969f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams 5069f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams public void bindAllocation(Allocation va, int slot) { 51771bebb94054d06f97284379c93a2620613513c3Jason Sams mRS.validate(); 5269f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams mRS.nScriptBindAllocation(mID, va.mID, slot); 5369f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams } 5469f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams 5569f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams public void setClearColor(float r, float g, float b, float a) { 56771bebb94054d06f97284379c93a2620613513c3Jason Sams mRS.validate(); 5722534176fb5c1257130ef4ee589739ca42766a32Jason Sams mRS.nScriptSetClearColor(mID, r, g, b, a); 5869f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams } 5969f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams 6069f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams public void setClearDepth(float d) { 61771bebb94054d06f97284379c93a2620613513c3Jason Sams mRS.validate(); 6222534176fb5c1257130ef4ee589739ca42766a32Jason Sams mRS.nScriptSetClearDepth(mID, d); 6369f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams } 6469f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams 6569f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams public void setClearStencil(int stencil) { 66771bebb94054d06f97284379c93a2620613513c3Jason Sams mRS.validate(); 6722534176fb5c1257130ef4ee589739ca42766a32Jason Sams mRS.nScriptSetClearStencil(mID, stencil); 6869f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams } 6969f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams 7022534176fb5c1257130ef4ee589739ca42766a32Jason Sams public void setTimeZone(String timeZone) { 71771bebb94054d06f97284379c93a2620613513c3Jason Sams mRS.validate(); 7222534176fb5c1257130ef4ee589739ca42766a32Jason Sams try { 7322534176fb5c1257130ef4ee589739ca42766a32Jason Sams mRS.nScriptSetTimeZone(mID, timeZone.getBytes("UTF-8")); 7422534176fb5c1257130ef4ee589739ca42766a32Jason Sams } catch (java.io.UnsupportedEncodingException e) { 7522534176fb5c1257130ef4ee589739ca42766a32Jason Sams throw new RuntimeException(e); 7622534176fb5c1257130ef4ee589739ca42766a32Jason Sams } 7722534176fb5c1257130ef4ee589739ca42766a32Jason Sams } 7869f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams 7969f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams public static class Builder { 8069f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams RenderScript mRS; 8169f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams boolean mIsRoot = false; 8243ee06857bb7f99446d1d84f8789016c5d105558Jason Sams Type[] mTypes; 83fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams String[] mNames; 84334ea0c98f051b5a6b85bc616c93304651854298Jason Sams boolean[] mWritable; 85be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams int mInvokableCount = 0; 86be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams Invokable[] mInvokables; 8769f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams 8869f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams Builder(RenderScript rs) { 8969f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams mRS = rs; 90fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams mTypes = new Type[MAX_SLOT]; 91fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams mNames = new String[MAX_SLOT]; 92334ea0c98f051b5a6b85bc616c93304651854298Jason Sams mWritable = new boolean[MAX_SLOT]; 93be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams mInvokables = new Invokable[MAX_SLOT]; 9469f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams } 9569f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams 96fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams public void setType(Type t, int slot) { 97fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams mTypes[slot] = t; 98fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams mNames[slot] = null; 99fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams } 100fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams 101fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams public void setType(Type t, String name, int slot) { 102fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams mTypes[slot] = t; 103fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams mNames[slot] = name; 10469f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams } 10569f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams 106be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams public Invokable addInvokable(String func) { 107be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams Invokable i = new Invokable(); 108be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams i.mName = func; 109be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams i.mRS = mRS; 110be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams i.mSlot = mInvokableCount; 111be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams mInvokables[mInvokableCount++] = i; 112be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams return i; 113be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams } 114be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams 115334ea0c98f051b5a6b85bc616c93304651854298Jason Sams public void setType(boolean writable, int slot) { 116334ea0c98f051b5a6b85bc616c93304651854298Jason Sams mWritable[slot] = writable; 117334ea0c98f051b5a6b85bc616c93304651854298Jason Sams } 118334ea0c98f051b5a6b85bc616c93304651854298Jason Sams 11969f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams void transferCreate() { 120fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams mRS.nScriptSetRoot(mIsRoot); 121fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams for(int ct=0; ct < mTypes.length; ct++) { 122fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams if(mTypes[ct] != null) { 123334ea0c98f051b5a6b85bc616c93304651854298Jason Sams mRS.nScriptSetType(mTypes[ct].mID, mWritable[ct], mNames[ct], ct); 124fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams } 12543ee06857bb7f99446d1d84f8789016c5d105558Jason Sams } 126be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams for(int ct=0; ct < mInvokableCount; ct++) { 127be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams mRS.nScriptSetInvokable(mInvokables[ct].mName, ct); 128be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams } 12969f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams } 13069f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams 13169f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams void transferObject(Script s) { 13269f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams s.mIsRoot = mIsRoot; 133fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams s.mTypes = mTypes; 134be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams s.mInvokables = new Invokable[mInvokableCount]; 135be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams for(int ct=0; ct < mInvokableCount; ct++) { 136be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams s.mInvokables[ct] = mInvokables[ct]; 137be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams s.mInvokables[ct].mScript = s; 138be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams } 139be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams s.mInvokables = null; 14069f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams } 14169f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams 14269f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams public void setRoot(boolean r) { 14369f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams mIsRoot = r; 14469f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams } 14569f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams 14669f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams } 14769f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams 14869f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams} 14969f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams 150