169f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams/*
2adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines * Copyright (C) 2008-2012 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
1908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Samsimport android.util.SparseArray;
2008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
219c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines/**
22c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * The parent class for all executable scripts. This should not be used by
23c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * applications.
2469f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams **/
2569f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Samspublic class Script extends BaseObj {
2608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
2708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    /**
2808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams     * KernelID is an identifier for a Script + root function pair. It is used
2908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams     * as an identifier for ScriptGroup creation.
3008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams     *
3108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams     * This class should not be directly created. Instead use the method in the
3208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams     * reflected or intrinsic code "getKernelID_funcname()".
3308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams     *
3408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams     */
3508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    public static final class KernelID extends BaseObj {
3608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        Script mScript;
3708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        int mSlot;
3808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        int mSig;
397a629fac82f88126642081b4474879f6a883e313Tim Murray        KernelID(long id, RenderScript rs, Script s, int slot, int sig) {
4008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams            super(id, rs);
4108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams            mScript = s;
4208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams            mSlot = slot;
4308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams            mSig = sig;
4408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        }
4508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    }
4608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
4708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    private final SparseArray<KernelID> mKIDs = new SparseArray<KernelID>();
4808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    /**
4908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams     * Only to be used by generated reflected classes.
5008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams     */
5108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    protected KernelID createKernelID(int slot, int sig, Element ein, Element eout) {
5208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        KernelID k = mKIDs.get(slot);
5308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        if (k != null) {
5408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams            return k;
5508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        }
5608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
577a629fac82f88126642081b4474879f6a883e313Tim Murray        long id = mRS.nScriptKernelIDCreate(getID(mRS), slot, sig);
5808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        if (id == 0) {
5908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams            throw new RSDriverException("Failed to create KernelID");
6008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        }
6108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
6208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        k = new KernelID(id, mRS, this, slot, sig);
6308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        mKIDs.put(slot, k);
6408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        return k;
6508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    }
6608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
6708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    /**
6808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams     * FieldID is an identifier for a Script + exported field pair. It is used
6908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams     * as an identifier for ScriptGroup creation.
7008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams     *
7108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams     * This class should not be directly created. Instead use the method in the
7208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams     * reflected or intrinsic code "getFieldID_funcname()".
7308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams     *
7408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams     */
7508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    public static final class FieldID extends BaseObj {
7608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        Script mScript;
7708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        int mSlot;
787a629fac82f88126642081b4474879f6a883e313Tim Murray        FieldID(long id, RenderScript rs, Script s, int slot) {
7908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams            super(id, rs);
8008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams            mScript = s;
8108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams            mSlot = slot;
8208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        }
8308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    }
8408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
8508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    private final SparseArray<FieldID> mFIDs = new SparseArray();
8608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    /**
8708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams     * Only to be used by generated reflected classes.
8808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams     */
8908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    protected FieldID createFieldID(int slot, Element e) {
9008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        FieldID f = mFIDs.get(slot);
9108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        if (f != null) {
9208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams            return f;
9308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        }
9408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
957a629fac82f88126642081b4474879f6a883e313Tim Murray        long id = mRS.nScriptFieldIDCreate(getID(mRS), slot);
9608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        if (id == 0) {
9708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams            throw new RSDriverException("Failed to create FieldID");
9808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        }
9908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
10008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        f = new FieldID(id, mRS, this, slot);
10108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        mFIDs.put(slot, f);
10208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        return f;
10308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    }
10408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
10508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
1069c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
10767e3d206ca80dd97309ca63169503088cb509bdeJason Sams     * Only intended for use by generated reflected code.
10867e3d206ca80dd97309ca63169503088cb509bdeJason Sams     *
10967e3d206ca80dd97309ca63169503088cb509bdeJason Sams     */
1102d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams    protected void invoke(int slot) {
111e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams        mRS.nScriptInvoke(getID(mRS), slot);
1122d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams    }
1132d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams
1149c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
11567e3d206ca80dd97309ca63169503088cb509bdeJason Sams     * Only intended for use by generated reflected code.
11667e3d206ca80dd97309ca63169503088cb509bdeJason Sams     *
11767e3d206ca80dd97309ca63169503088cb509bdeJason Sams     */
11896ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams    protected void invoke(int slot, FieldPacker v) {
11996ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams        if (v != null) {
120e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams            mRS.nScriptInvokeV(getID(mRS), slot, v.getData());
12196ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams        } else {
122e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams            mRS.nScriptInvoke(getID(mRS), slot);
12396ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams        }
1244d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    }
1254d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
1269c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
1276e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams     * Only intended for use by generated reflected code.
1286e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams     *
1296e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams     */
1306e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    protected void forEach(int slot, Allocation ain, Allocation aout, FieldPacker v) {
131678cc7fe9fef00fb3381e64f95cc6907796bcd8eJason Sams        mRS.validate();
132678cc7fe9fef00fb3381e64f95cc6907796bcd8eJason Sams        mRS.validateObject(ain);
133678cc7fe9fef00fb3381e64f95cc6907796bcd8eJason Sams        mRS.validateObject(aout);
1346e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams        if (ain == null && aout == null) {
1356e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams            throw new RSIllegalArgumentException(
1366e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams                "At least one of ain or aout is required to be non-null.");
1376e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams        }
1387a629fac82f88126642081b4474879f6a883e313Tim Murray        long in_id = 0;
1396e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams        if (ain != null) {
140e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams            in_id = ain.getID(mRS);
1416e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams        }
1427a629fac82f88126642081b4474879f6a883e313Tim Murray        long out_id = 0;
1436e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams        if (aout != null) {
144e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams            out_id = aout.getID(mRS);
1456e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams        }
1466e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams        byte[] params = null;
1476e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams        if (v != null) {
1486e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams            params = v.getData();
1496e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams        }
150e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams        mRS.nScriptForEach(getID(mRS), slot, in_id, out_id, params);
1516e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    }
1526e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams
153f64cca905c45fcc74aacf78e6510e133385110cfJason Sams    /**
154f64cca905c45fcc74aacf78e6510e133385110cfJason Sams     * Only intended for use by generated reflected code.
155f64cca905c45fcc74aacf78e6510e133385110cfJason Sams     *
156f64cca905c45fcc74aacf78e6510e133385110cfJason Sams     */
157eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    protected void forEach(int slot, Allocation ain, Allocation aout, FieldPacker v, LaunchOptions sc) {
158678cc7fe9fef00fb3381e64f95cc6907796bcd8eJason Sams        mRS.validate();
159678cc7fe9fef00fb3381e64f95cc6907796bcd8eJason Sams        mRS.validateObject(ain);
160678cc7fe9fef00fb3381e64f95cc6907796bcd8eJason Sams        mRS.validateObject(aout);
161eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray        if (ain == null && aout == null) {
162eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray            throw new RSIllegalArgumentException(
163eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray                "At least one of ain or aout is required to be non-null.");
164eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray        }
165ba9dd06176cf833898832861114e225fdb428ea0Tim Murray
166ba9dd06176cf833898832861114e225fdb428ea0Tim Murray        if (sc == null) {
167ba9dd06176cf833898832861114e225fdb428ea0Tim Murray            forEach(slot, ain, aout, v);
168ba9dd06176cf833898832861114e225fdb428ea0Tim Murray            return;
169ba9dd06176cf833898832861114e225fdb428ea0Tim Murray        }
1707a629fac82f88126642081b4474879f6a883e313Tim Murray        long in_id = 0;
171eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray        if (ain != null) {
172eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray            in_id = ain.getID(mRS);
173eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray        }
1747a629fac82f88126642081b4474879f6a883e313Tim Murray        long out_id = 0;
175eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray        if (aout != null) {
176eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray            out_id = aout.getID(mRS);
177eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray        }
178eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray        byte[] params = null;
179eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray        if (v != null) {
180eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray            params = v.getData();
181eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray        }
182eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray        mRS.nScriptForEachClipped(getID(mRS), slot, in_id, out_id, params, sc.xstart, sc.xend, sc.ystart, sc.yend, sc.zstart, sc.zend);
183eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    }
1844d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
185949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    /**
186949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes     * Only intended for use by generated reflected code.
187949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes     *
188949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes     * @hide
189949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes     */
190949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    protected void forEach(int slot, Allocation[] ains, Allocation aout, FieldPacker v) {
191949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes        forEach(slot, ains, aout, v, new LaunchOptions());
192949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    }
193949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
194949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    /**
195949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes     * Only intended for use by generated reflected code.
196949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes     *
197949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes     * @hide
198949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes     */
199949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    protected void forEach(int slot, Allocation[] ains, Allocation aout, FieldPacker v, LaunchOptions sc) {
200949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes        mRS.validate();
201949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
202949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes        for (Allocation ain : ains) {
203949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes          mRS.validateObject(ain);
204949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes        }
205949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
206949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes        mRS.validateObject(aout);
207949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes        if (ains == null && aout == null) {
208949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes            throw new RSIllegalArgumentException(
209949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes                "At least one of ain or aout is required to be non-null.");
210949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes        }
211949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
212949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes        if (sc == null) {
213949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes            forEach(slot, ains, aout, v);
214949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes            return;
215949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes        }
216949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
217949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes        long[] in_ids = new long[ains.length];
218949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes        for (int index = 0; index < ains.length; ++index) {
219949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes            in_ids[index] = ains[index].getID(mRS);
220949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes        }
221949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
222949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes        long out_id = 0;
223949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes        if (aout != null) {
224949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes            out_id = aout.getID(mRS);
225949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes        }
226949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes        byte[] params = null;
227949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes        if (v != null) {
228949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes            params = v.getData();
229949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes        }
230949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes        mRS.nScriptForEachMultiClipped(getID(mRS), slot, in_ids, out_id, params, sc.xstart, sc.xend, sc.ystart, sc.yend, sc.zstart, sc.zend);
231949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    }
232949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
2337a629fac82f88126642081b4474879f6a883e313Tim Murray    Script(long id, RenderScript rs) {
2340de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk        super(id, rs);
23569f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams    }
23669f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams
23767e3d206ca80dd97309ca63169503088cb509bdeJason Sams
2389c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
23967e3d206ca80dd97309ca63169503088cb509bdeJason Sams     * Only intended for use by generated reflected code.
24067e3d206ca80dd97309ca63169503088cb509bdeJason Sams     *
24167e3d206ca80dd97309ca63169503088cb509bdeJason Sams     */
24269f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams    public void bindAllocation(Allocation va, int slot) {
243771bebb94054d06f97284379c93a2620613513c3Jason Sams        mRS.validate();
244678cc7fe9fef00fb3381e64f95cc6907796bcd8eJason Sams        mRS.validateObject(va);
2454d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams        if (va != null) {
246cf9c894a9b7523cd5ec707218b89517f67caa047Jason Sams            if (mRS.getApplicationContext().getApplicationInfo().targetSdkVersion >= 20) {
247cf9c894a9b7523cd5ec707218b89517f67caa047Jason Sams                final Type t = va.mType;
248cf9c894a9b7523cd5ec707218b89517f67caa047Jason Sams                if (t.hasMipmaps() || t.hasFaces() || (t.getY() != 0) || (t.getZ() != 0)) {
249cf9c894a9b7523cd5ec707218b89517f67caa047Jason Sams                    throw new RSIllegalArgumentException(
250cf9c894a9b7523cd5ec707218b89517f67caa047Jason Sams                        "API 20+ only allows simple 1D allocations to be used with bind.");
251cf9c894a9b7523cd5ec707218b89517f67caa047Jason Sams                }
252cf9c894a9b7523cd5ec707218b89517f67caa047Jason Sams            }
253e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams            mRS.nScriptBindAllocation(getID(mRS), va.getID(mRS), slot);
2544d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams        } else {
255e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams            mRS.nScriptBindAllocation(getID(mRS), 0, slot);
2564d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams        }
2574d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    }
2584d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
2599c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
26067e3d206ca80dd97309ca63169503088cb509bdeJason Sams     * Only intended for use by generated reflected code.
26167e3d206ca80dd97309ca63169503088cb509bdeJason Sams     *
26267e3d206ca80dd97309ca63169503088cb509bdeJason Sams     */
2634d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    public void setVar(int index, float v) {
264e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams        mRS.nScriptSetVarF(getID(mRS), index, v);
2654d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    }
2667c4caadb939b1563328251c156262c179a685c70Tim Murray    public float getVarF(int index) {
2677c4caadb939b1563328251c156262c179a685c70Tim Murray        return mRS.nScriptGetVarF(getID(mRS), index);
2687c4caadb939b1563328251c156262c179a685c70Tim Murray    }
2694d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
2709c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
27167e3d206ca80dd97309ca63169503088cb509bdeJason Sams     * Only intended for use by generated reflected code.
27267e3d206ca80dd97309ca63169503088cb509bdeJason Sams     *
27367e3d206ca80dd97309ca63169503088cb509bdeJason Sams     */
274ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines    public void setVar(int index, double v) {
275e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams        mRS.nScriptSetVarD(getID(mRS), index, v);
276ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines    }
2777c4caadb939b1563328251c156262c179a685c70Tim Murray    public double getVarD(int index) {
2787c4caadb939b1563328251c156262c179a685c70Tim Murray        return mRS.nScriptGetVarD(getID(mRS), index);
2797c4caadb939b1563328251c156262c179a685c70Tim Murray    }
280ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines
2819c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
28267e3d206ca80dd97309ca63169503088cb509bdeJason Sams     * Only intended for use by generated reflected code.
28367e3d206ca80dd97309ca63169503088cb509bdeJason Sams     *
28467e3d206ca80dd97309ca63169503088cb509bdeJason Sams     */
2854d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    public void setVar(int index, int v) {
286e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams        mRS.nScriptSetVarI(getID(mRS), index, v);
2874d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    }
2887c4caadb939b1563328251c156262c179a685c70Tim Murray    public int getVarI(int index) {
2897c4caadb939b1563328251c156262c179a685c70Tim Murray        return mRS.nScriptGetVarI(getID(mRS), index);
2907c4caadb939b1563328251c156262c179a685c70Tim Murray    }
2917c4caadb939b1563328251c156262c179a685c70Tim Murray
2924d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
2939c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
29467e3d206ca80dd97309ca63169503088cb509bdeJason Sams     * Only intended for use by generated reflected code.
29567e3d206ca80dd97309ca63169503088cb509bdeJason Sams     *
29667e3d206ca80dd97309ca63169503088cb509bdeJason Sams     */
297031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines    public void setVar(int index, long v) {
298e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams        mRS.nScriptSetVarJ(getID(mRS), index, v);
299031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines    }
3007c4caadb939b1563328251c156262c179a685c70Tim Murray    public long getVarJ(int index) {
3017c4caadb939b1563328251c156262c179a685c70Tim Murray        return mRS.nScriptGetVarJ(getID(mRS), index);
3027c4caadb939b1563328251c156262c179a685c70Tim Murray    }
3037c4caadb939b1563328251c156262c179a685c70Tim Murray
304031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines
3059c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
30667e3d206ca80dd97309ca63169503088cb509bdeJason Sams     * Only intended for use by generated reflected code.
30767e3d206ca80dd97309ca63169503088cb509bdeJason Sams     *
30867e3d206ca80dd97309ca63169503088cb509bdeJason Sams     */
3090b9a22cf782ab8f837161bf3357e08471ff5b9f2Jason Sams    public void setVar(int index, boolean v) {
310e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams        mRS.nScriptSetVarI(getID(mRS), index, v ? 1 : 0);
3110b9a22cf782ab8f837161bf3357e08471ff5b9f2Jason Sams    }
3127c4caadb939b1563328251c156262c179a685c70Tim Murray    public boolean getVarB(int index) {
3137c4caadb939b1563328251c156262c179a685c70Tim Murray        return mRS.nScriptGetVarI(getID(mRS), index) > 0 ? true : false;
3147c4caadb939b1563328251c156262c179a685c70Tim Murray    }
3150b9a22cf782ab8f837161bf3357e08471ff5b9f2Jason Sams
3169c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
31767e3d206ca80dd97309ca63169503088cb509bdeJason Sams     * Only intended for use by generated reflected code.
31867e3d206ca80dd97309ca63169503088cb509bdeJason Sams     *
31967e3d206ca80dd97309ca63169503088cb509bdeJason Sams     */
3206f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams    public void setVar(int index, BaseObj o) {
321678cc7fe9fef00fb3381e64f95cc6907796bcd8eJason Sams        mRS.validate();
322678cc7fe9fef00fb3381e64f95cc6907796bcd8eJason Sams        mRS.validateObject(o);
323e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams        mRS.nScriptSetVarObj(getID(mRS), index, (o == null) ? 0 : o.getID(mRS));
3246f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams    }
3256f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams
3269c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
32767e3d206ca80dd97309ca63169503088cb509bdeJason Sams     * Only intended for use by generated reflected code.
32867e3d206ca80dd97309ca63169503088cb509bdeJason Sams     *
32967e3d206ca80dd97309ca63169503088cb509bdeJason Sams     */
3304d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    public void setVar(int index, FieldPacker v) {
331e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams        mRS.nScriptSetVarV(getID(mRS), index, v.getData());
33269f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams    }
33369f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams
3349c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
335adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines     * Only intended for use by generated reflected code.
336adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines     *
337adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines     */
338adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    public void setVar(int index, FieldPacker v, Element e, int[] dims) {
339adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines        mRS.nScriptSetVarVE(getID(mRS), index, v.getData(), e.getID(mRS), dims);
340adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    }
341adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines
342f64cca905c45fcc74aacf78e6510e133385110cfJason Sams    /**
343f64cca905c45fcc74aacf78e6510e133385110cfJason Sams     * Only intended for use by generated reflected code.
344f64cca905c45fcc74aacf78e6510e133385110cfJason Sams     *
345f64cca905c45fcc74aacf78e6510e133385110cfJason Sams     */
3467c4caadb939b1563328251c156262c179a685c70Tim Murray    public void getVarV(int index, FieldPacker v) {
3477c4caadb939b1563328251c156262c179a685c70Tim Murray        mRS.nScriptGetVarV(getID(mRS), index, v.getData());
3487c4caadb939b1563328251c156262c179a685c70Tim Murray    }
3497c4caadb939b1563328251c156262c179a685c70Tim Murray
35022534176fb5c1257130ef4ee589739ca42766a32Jason Sams    public void setTimeZone(String timeZone) {
351771bebb94054d06f97284379c93a2620613513c3Jason Sams        mRS.validate();
35222534176fb5c1257130ef4ee589739ca42766a32Jason Sams        try {
353e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams            mRS.nScriptSetTimeZone(getID(mRS), timeZone.getBytes("UTF-8"));
35422534176fb5c1257130ef4ee589739ca42766a32Jason Sams        } catch (java.io.UnsupportedEncodingException e) {
35522534176fb5c1257130ef4ee589739ca42766a32Jason Sams            throw new RuntimeException(e);
35622534176fb5c1257130ef4ee589739ca42766a32Jason Sams        }
35722534176fb5c1257130ef4ee589739ca42766a32Jason Sams    }
35869f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams
359c11e25c4e653124def1fb18e203b894f42106cbeTim Murray    /**
360c11e25c4e653124def1fb18e203b894f42106cbeTim Murray     * Only intended for use by generated reflected code.
361c11e25c4e653124def1fb18e203b894f42106cbeTim Murray     *
362c11e25c4e653124def1fb18e203b894f42106cbeTim Murray     */
36369f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams    public static class Builder {
36469f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams        RenderScript mRS;
36569f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams
36669f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams        Builder(RenderScript rs) {
36769f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams            mRS = rs;
368fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams        }
36969f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams    }
37069f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams
3712d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams
372f64cca905c45fcc74aacf78e6510e133385110cfJason Sams    /**
373f64cca905c45fcc74aacf78e6510e133385110cfJason Sams     * Only intended for use by generated reflected code.
374f64cca905c45fcc74aacf78e6510e133385110cfJason Sams     *
375f64cca905c45fcc74aacf78e6510e133385110cfJason Sams     */
3762d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams    public static class FieldBase {
3772d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams        protected Element mElement;
3782d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams        protected Allocation mAllocation;
3792d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams
3802d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams        protected void init(RenderScript rs, int dimx) {
3815476b450e50939940dcf3f15c92335cee2fc572dJason Sams            mAllocation = Allocation.createSized(rs, mElement, dimx, Allocation.USAGE_SCRIPT);
3825476b450e50939940dcf3f15c92335cee2fc572dJason Sams        }
3835476b450e50939940dcf3f15c92335cee2fc572dJason Sams
3845476b450e50939940dcf3f15c92335cee2fc572dJason Sams        protected void init(RenderScript rs, int dimx, int usages) {
3855476b450e50939940dcf3f15c92335cee2fc572dJason Sams            mAllocation = Allocation.createSized(rs, mElement, dimx, Allocation.USAGE_SCRIPT | usages);
3862d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams        }
3872d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams
3882d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams        protected FieldBase() {
3892d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams        }
3902d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams
3912d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams        public Element getElement() {
3922d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams            return mElement;
3932d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams        }
3942d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams
3952d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams        public Type getType() {
39631a7e42f4baa059352f0db119de38428e655eab2Jason Sams            return mAllocation.getType();
3972d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams        }
3982d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams
3992d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams        public Allocation getAllocation() {
4002d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams            return mAllocation;
4012d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams        }
4022d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams
4032d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams        //@Override
4042d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams        public void updateAllocation() {
4052d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams        }
4062d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams    }
407fbfaa853630edfca25eaa840f92035713eef13baTim Murray
408fbfaa853630edfca25eaa840f92035713eef13baTim Murray
409f64cca905c45fcc74aacf78e6510e133385110cfJason Sams    /**
410f64cca905c45fcc74aacf78e6510e133385110cfJason Sams     * Class used to specify clipping for a kernel launch.
411f64cca905c45fcc74aacf78e6510e133385110cfJason Sams     *
412f64cca905c45fcc74aacf78e6510e133385110cfJason Sams     */
413f64cca905c45fcc74aacf78e6510e133385110cfJason Sams    public static final class LaunchOptions {
414f64cca905c45fcc74aacf78e6510e133385110cfJason Sams        private int xstart = 0;
415f64cca905c45fcc74aacf78e6510e133385110cfJason Sams        private int ystart = 0;
416f64cca905c45fcc74aacf78e6510e133385110cfJason Sams        private int xend = 0;
417f64cca905c45fcc74aacf78e6510e133385110cfJason Sams        private int yend = 0;
418f64cca905c45fcc74aacf78e6510e133385110cfJason Sams        private int zstart = 0;
419f64cca905c45fcc74aacf78e6510e133385110cfJason Sams        private int zend = 0;
420f64cca905c45fcc74aacf78e6510e133385110cfJason Sams        private int strategy;
421f64cca905c45fcc74aacf78e6510e133385110cfJason Sams
422f64cca905c45fcc74aacf78e6510e133385110cfJason Sams        /**
423f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         * Set the X range.  If the end value is set to 0 the X dimension is not
424f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         * clipped.
425f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         *
426f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         * @param xstartArg Must be >= 0
427f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         * @param xendArg Must be >= xstartArg
428f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         *
429f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         * @return LaunchOptions
430f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         */
431eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray        public LaunchOptions setX(int xstartArg, int xendArg) {
432fbfaa853630edfca25eaa840f92035713eef13baTim Murray            if (xstartArg < 0 || xendArg <= xstartArg) {
433fbfaa853630edfca25eaa840f92035713eef13baTim Murray                throw new RSIllegalArgumentException("Invalid dimensions");
434fbfaa853630edfca25eaa840f92035713eef13baTim Murray            }
435fbfaa853630edfca25eaa840f92035713eef13baTim Murray            xstart = xstartArg;
436fbfaa853630edfca25eaa840f92035713eef13baTim Murray            xend = xendArg;
437eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray            return this;
438fbfaa853630edfca25eaa840f92035713eef13baTim Murray        }
439fbfaa853630edfca25eaa840f92035713eef13baTim Murray
440f64cca905c45fcc74aacf78e6510e133385110cfJason Sams        /**
441f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         * Set the Y range.  If the end value is set to 0 the Y dimension is not
442f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         * clipped.
443f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         *
444f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         * @param ystartArg Must be >= 0
445f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         * @param yendArg Must be >= ystartArg
446f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         *
447f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         * @return LaunchOptions
448f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         */
449eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray        public LaunchOptions setY(int ystartArg, int yendArg) {
450fbfaa853630edfca25eaa840f92035713eef13baTim Murray            if (ystartArg < 0 || yendArg <= ystartArg) {
451fbfaa853630edfca25eaa840f92035713eef13baTim Murray                throw new RSIllegalArgumentException("Invalid dimensions");
452fbfaa853630edfca25eaa840f92035713eef13baTim Murray            }
453fbfaa853630edfca25eaa840f92035713eef13baTim Murray            ystart = ystartArg;
454fbfaa853630edfca25eaa840f92035713eef13baTim Murray            yend = yendArg;
455eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray            return this;
456eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray        }
457eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray
458f64cca905c45fcc74aacf78e6510e133385110cfJason Sams        /**
459f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         * Set the Z range.  If the end value is set to 0 the Z dimension is not
460f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         * clipped.
461f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         *
462f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         * @param zstartArg Must be >= 0
463f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         * @param zendArg Must be >= zstartArg
464f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         *
465f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         * @return LaunchOptions
466f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         */
467eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray        public LaunchOptions setZ(int zstartArg, int zendArg) {
468eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray            if (zstartArg < 0 || zendArg <= zstartArg) {
469eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray                throw new RSIllegalArgumentException("Invalid dimensions");
470eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray            }
471eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray            zstart = zstartArg;
472eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray            zend = zendArg;
473eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray            return this;
474fbfaa853630edfca25eaa840f92035713eef13baTim Murray        }
475fbfaa853630edfca25eaa840f92035713eef13baTim Murray
476eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray
477f64cca905c45fcc74aacf78e6510e133385110cfJason Sams        /**
478f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         * Returns the current X start
479f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         *
480f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         * @return int current value
481f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         */
482fbfaa853630edfca25eaa840f92035713eef13baTim Murray        public int getXStart() {
483fbfaa853630edfca25eaa840f92035713eef13baTim Murray            return xstart;
484fbfaa853630edfca25eaa840f92035713eef13baTim Murray        }
485f64cca905c45fcc74aacf78e6510e133385110cfJason Sams        /**
486f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         * Returns the current X end
487f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         *
488f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         * @return int current value
489f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         */
490fbfaa853630edfca25eaa840f92035713eef13baTim Murray        public int getXEnd() {
491fbfaa853630edfca25eaa840f92035713eef13baTim Murray            return xend;
492fbfaa853630edfca25eaa840f92035713eef13baTim Murray        }
493f64cca905c45fcc74aacf78e6510e133385110cfJason Sams        /**
494f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         * Returns the current Y start
495f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         *
496f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         * @return int current value
497f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         */
498fbfaa853630edfca25eaa840f92035713eef13baTim Murray        public int getYStart() {
499fbfaa853630edfca25eaa840f92035713eef13baTim Murray            return ystart;
500fbfaa853630edfca25eaa840f92035713eef13baTim Murray        }
501f64cca905c45fcc74aacf78e6510e133385110cfJason Sams        /**
502f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         * Returns the current Y end
503f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         *
504f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         * @return int current value
505f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         */
506fbfaa853630edfca25eaa840f92035713eef13baTim Murray        public int getYEnd() {
507fbfaa853630edfca25eaa840f92035713eef13baTim Murray            return yend;
508fbfaa853630edfca25eaa840f92035713eef13baTim Murray        }
509f64cca905c45fcc74aacf78e6510e133385110cfJason Sams        /**
510f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         * Returns the current Z start
511f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         *
512f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         * @return int current value
513f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         */
514eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray        public int getZStart() {
515eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray            return zstart;
516eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray        }
517f64cca905c45fcc74aacf78e6510e133385110cfJason Sams        /**
518f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         * Returns the current Z end
519f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         *
520f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         * @return int current value
521f64cca905c45fcc74aacf78e6510e133385110cfJason Sams         */
522eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray        public int getZEnd() {
523eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray            return zend;
524eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray        }
525fbfaa853630edfca25eaa840f92035713eef13baTim Murray
526fbfaa853630edfca25eaa840f92035713eef13baTim Murray    }
52769f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams}
528