blob: c49ef948db97fa49012c4e38dca7e76496e3a276 [file] [log] [blame]
Jason Sams69f0d312009-08-03 18:11:17 -07001/*
Stephen Hinesadeb8092012-04-20 14:26:06 -07002 * Copyright (C) 2008-2012 The Android Open Source Project
Jason Sams69f0d312009-08-03 18:11:17 -07003 *
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.renderscript;
18
Jason Sams08a81582012-09-18 12:32:10 -070019import android.util.SparseArray;
20
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -070021/**
Tim Murrayc11e25c2013-04-09 11:01:01 -070022 * The parent class for all executable scripts. This should not be used by
23 * applications.
Jason Sams69f0d312009-08-03 18:11:17 -070024 **/
25public class Script extends BaseObj {
Jason Sams08a81582012-09-18 12:32:10 -070026
27 /**
28 * KernelID is an identifier for a Script + root function pair. It is used
29 * as an identifier for ScriptGroup creation.
30 *
31 * This class should not be directly created. Instead use the method in the
32 * reflected or intrinsic code "getKernelID_funcname()".
33 *
34 */
35 public static final class KernelID extends BaseObj {
36 Script mScript;
37 int mSlot;
38 int mSig;
Tim Murray7a629fa2013-11-19 12:45:54 -080039 KernelID(long id, RenderScript rs, Script s, int slot, int sig) {
Jason Sams08a81582012-09-18 12:32:10 -070040 super(id, rs);
41 mScript = s;
42 mSlot = slot;
43 mSig = sig;
44 }
45 }
46
47 private final SparseArray<KernelID> mKIDs = new SparseArray<KernelID>();
48 /**
49 * Only to be used by generated reflected classes.
Jason Sams08a81582012-09-18 12:32:10 -070050 */
51 protected KernelID createKernelID(int slot, int sig, Element ein, Element eout) {
52 KernelID k = mKIDs.get(slot);
53 if (k != null) {
54 return k;
55 }
56
Tim Murray7a629fa2013-11-19 12:45:54 -080057 long id = mRS.nScriptKernelIDCreate(getID(mRS), slot, sig);
Jason Sams08a81582012-09-18 12:32:10 -070058 if (id == 0) {
59 throw new RSDriverException("Failed to create KernelID");
60 }
61
62 k = new KernelID(id, mRS, this, slot, sig);
63 mKIDs.put(slot, k);
64 return k;
65 }
66
67 /**
68 * FieldID is an identifier for a Script + exported field pair. It is used
69 * as an identifier for ScriptGroup creation.
70 *
71 * This class should not be directly created. Instead use the method in the
72 * reflected or intrinsic code "getFieldID_funcname()".
73 *
74 */
75 public static final class FieldID extends BaseObj {
76 Script mScript;
77 int mSlot;
Tim Murray7a629fa2013-11-19 12:45:54 -080078 FieldID(long id, RenderScript rs, Script s, int slot) {
Jason Sams08a81582012-09-18 12:32:10 -070079 super(id, rs);
80 mScript = s;
81 mSlot = slot;
82 }
83 }
84
85 private final SparseArray<FieldID> mFIDs = new SparseArray();
86 /**
87 * Only to be used by generated reflected classes.
Jason Sams08a81582012-09-18 12:32:10 -070088 */
89 protected FieldID createFieldID(int slot, Element e) {
90 FieldID f = mFIDs.get(slot);
91 if (f != null) {
92 return f;
93 }
94
Tim Murray7a629fa2013-11-19 12:45:54 -080095 long id = mRS.nScriptFieldIDCreate(getID(mRS), slot);
Jason Sams08a81582012-09-18 12:32:10 -070096 if (id == 0) {
97 throw new RSDriverException("Failed to create FieldID");
98 }
99
100 f = new FieldID(id, mRS, this, slot);
101 mFIDs.put(slot, f);
102 return f;
103 }
104
105
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700106 /**
Jason Sams67e3d202011-01-09 13:49:01 -0800107 * Only intended for use by generated reflected code.
108 *
Jason Sams67e3d202011-01-09 13:49:01 -0800109 */
Jason Sams2d71bc72010-03-26 16:06:43 -0700110 protected void invoke(int slot) {
Jason Samse07694b2012-04-03 15:36:36 -0700111 mRS.nScriptInvoke(getID(mRS), slot);
Jason Sams2d71bc72010-03-26 16:06:43 -0700112 }
113
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700114 /**
Jason Sams67e3d202011-01-09 13:49:01 -0800115 * Only intended for use by generated reflected code.
116 *
Jason Sams67e3d202011-01-09 13:49:01 -0800117 */
Jason Sams96ed4cf2010-06-15 12:15:57 -0700118 protected void invoke(int slot, FieldPacker v) {
119 if (v != null) {
Jason Samse07694b2012-04-03 15:36:36 -0700120 mRS.nScriptInvokeV(getID(mRS), slot, v.getData());
Jason Sams96ed4cf2010-06-15 12:15:57 -0700121 } else {
Jason Samse07694b2012-04-03 15:36:36 -0700122 mRS.nScriptInvoke(getID(mRS), slot);
Jason Sams96ed4cf2010-06-15 12:15:57 -0700123 }
Jason Sams4d339932010-05-11 14:03:58 -0700124 }
125
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700126 /**
Jason Sams6e494d32011-04-27 16:33:11 -0700127 * Only intended for use by generated reflected code.
128 *
Jason Sams6e494d32011-04-27 16:33:11 -0700129 */
130 protected void forEach(int slot, Allocation ain, Allocation aout, FieldPacker v) {
Jason Sams678cc7f2014-03-05 16:09:02 -0800131 mRS.validate();
132 mRS.validateObject(ain);
133 mRS.validateObject(aout);
Jason Sams6e494d32011-04-27 16:33:11 -0700134 if (ain == null && aout == null) {
135 throw new RSIllegalArgumentException(
136 "At least one of ain or aout is required to be non-null.");
137 }
Tim Murray7a629fa2013-11-19 12:45:54 -0800138 long in_id = 0;
Jason Sams6e494d32011-04-27 16:33:11 -0700139 if (ain != null) {
Jason Samse07694b2012-04-03 15:36:36 -0700140 in_id = ain.getID(mRS);
Jason Sams6e494d32011-04-27 16:33:11 -0700141 }
Tim Murray7a629fa2013-11-19 12:45:54 -0800142 long out_id = 0;
Jason Sams6e494d32011-04-27 16:33:11 -0700143 if (aout != null) {
Jason Samse07694b2012-04-03 15:36:36 -0700144 out_id = aout.getID(mRS);
Jason Sams6e494d32011-04-27 16:33:11 -0700145 }
146 byte[] params = null;
147 if (v != null) {
148 params = v.getData();
149 }
Jason Samse07694b2012-04-03 15:36:36 -0700150 mRS.nScriptForEach(getID(mRS), slot, in_id, out_id, params);
Jason Sams6e494d32011-04-27 16:33:11 -0700151 }
152
Jason Samsf64cca92013-04-19 12:56:37 -0700153 /**
154 * Only intended for use by generated reflected code.
155 *
Jason Samsf64cca92013-04-19 12:56:37 -0700156 */
Tim Murrayeb8c29c2013-02-07 12:16:41 -0800157 protected void forEach(int slot, Allocation ain, Allocation aout, FieldPacker v, LaunchOptions sc) {
Jason Sams678cc7f2014-03-05 16:09:02 -0800158 mRS.validate();
159 mRS.validateObject(ain);
160 mRS.validateObject(aout);
Tim Murrayeb8c29c2013-02-07 12:16:41 -0800161 if (ain == null && aout == null) {
162 throw new RSIllegalArgumentException(
163 "At least one of ain or aout is required to be non-null.");
164 }
Tim Murrayba9dd062013-02-12 16:22:34 -0800165
166 if (sc == null) {
167 forEach(slot, ain, aout, v);
168 return;
169 }
Tim Murray7a629fa2013-11-19 12:45:54 -0800170 long in_id = 0;
Tim Murrayeb8c29c2013-02-07 12:16:41 -0800171 if (ain != null) {
172 in_id = ain.getID(mRS);
173 }
Tim Murray7a629fa2013-11-19 12:45:54 -0800174 long out_id = 0;
Tim Murrayeb8c29c2013-02-07 12:16:41 -0800175 if (aout != null) {
176 out_id = aout.getID(mRS);
177 }
178 byte[] params = null;
179 if (v != null) {
180 params = v.getData();
181 }
182 mRS.nScriptForEachClipped(getID(mRS), slot, in_id, out_id, params, sc.xstart, sc.xend, sc.ystart, sc.yend, sc.zstart, sc.zend);
183 }
Jason Sams4d339932010-05-11 14:03:58 -0700184
Chris Wailes94961062014-06-11 12:01:28 -0700185 /**
186 * Only intended for use by generated reflected code.
187 *
188 * @hide
189 */
190 protected void forEach(int slot, Allocation[] ains, Allocation aout, FieldPacker v) {
191 forEach(slot, ains, aout, v, new LaunchOptions());
192 }
193
194 /**
195 * Only intended for use by generated reflected code.
196 *
197 * @hide
198 */
199 protected void forEach(int slot, Allocation[] ains, Allocation aout, FieldPacker v, LaunchOptions sc) {
200 mRS.validate();
201
202 for (Allocation ain : ains) {
203 mRS.validateObject(ain);
204 }
205
206 mRS.validateObject(aout);
207 if (ains == null && aout == null) {
208 throw new RSIllegalArgumentException(
209 "At least one of ain or aout is required to be non-null.");
210 }
211
212 if (sc == null) {
213 forEach(slot, ains, aout, v);
214 return;
215 }
216
217 long[] in_ids = new long[ains.length];
218 for (int index = 0; index < ains.length; ++index) {
219 in_ids[index] = ains[index].getID(mRS);
220 }
221
222 long out_id = 0;
223 if (aout != null) {
224 out_id = aout.getID(mRS);
225 }
226 byte[] params = null;
227 if (v != null) {
228 params = v.getData();
229 }
230 mRS.nScriptForEachMultiClipped(getID(mRS), slot, in_ids, out_id, params, sc.xstart, sc.xend, sc.ystart, sc.yend, sc.zstart, sc.zend);
231 }
232
Tim Murray7a629fa2013-11-19 12:45:54 -0800233 Script(long id, RenderScript rs) {
Alex Sakhartchouk0de94442010-08-11 14:41:28 -0700234 super(id, rs);
Jason Sams69f0d312009-08-03 18:11:17 -0700235 }
236
Jason Sams67e3d202011-01-09 13:49:01 -0800237
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700238 /**
Jason Sams67e3d202011-01-09 13:49:01 -0800239 * Only intended for use by generated reflected code.
240 *
Jason Sams67e3d202011-01-09 13:49:01 -0800241 */
Jason Sams69f0d312009-08-03 18:11:17 -0700242 public void bindAllocation(Allocation va, int slot) {
Jason Sams771bebb2009-12-07 12:40:12 -0800243 mRS.validate();
Jason Sams678cc7f2014-03-05 16:09:02 -0800244 mRS.validateObject(va);
Jason Sams4d339932010-05-11 14:03:58 -0700245 if (va != null) {
Jason Samscf9c8942014-01-14 16:18:14 -0800246 if (mRS.getApplicationContext().getApplicationInfo().targetSdkVersion >= 20) {
247 final Type t = va.mType;
248 if (t.hasMipmaps() || t.hasFaces() || (t.getY() != 0) || (t.getZ() != 0)) {
249 throw new RSIllegalArgumentException(
250 "API 20+ only allows simple 1D allocations to be used with bind.");
251 }
252 }
Jason Samse07694b2012-04-03 15:36:36 -0700253 mRS.nScriptBindAllocation(getID(mRS), va.getID(mRS), slot);
Jason Sams4d339932010-05-11 14:03:58 -0700254 } else {
Jason Samse07694b2012-04-03 15:36:36 -0700255 mRS.nScriptBindAllocation(getID(mRS), 0, slot);
Jason Sams4d339932010-05-11 14:03:58 -0700256 }
257 }
258
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700259 /**
Jason Sams67e3d202011-01-09 13:49:01 -0800260 * Only intended for use by generated reflected code.
261 *
Jason Sams67e3d202011-01-09 13:49:01 -0800262 */
Jason Sams4d339932010-05-11 14:03:58 -0700263 public void setVar(int index, float v) {
Jason Samse07694b2012-04-03 15:36:36 -0700264 mRS.nScriptSetVarF(getID(mRS), index, v);
Jason Sams4d339932010-05-11 14:03:58 -0700265 }
Tim Murray7c4caad2013-04-10 16:21:40 -0700266 public float getVarF(int index) {
267 return mRS.nScriptGetVarF(getID(mRS), index);
268 }
Jason Sams4d339932010-05-11 14:03:58 -0700269
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700270 /**
Jason Sams67e3d202011-01-09 13:49:01 -0800271 * Only intended for use by generated reflected code.
272 *
Jason Sams67e3d202011-01-09 13:49:01 -0800273 */
Stephen Hinesca54ec32010-09-20 17:20:30 -0700274 public void setVar(int index, double v) {
Jason Samse07694b2012-04-03 15:36:36 -0700275 mRS.nScriptSetVarD(getID(mRS), index, v);
Stephen Hinesca54ec32010-09-20 17:20:30 -0700276 }
Tim Murray7c4caad2013-04-10 16:21:40 -0700277 public double getVarD(int index) {
278 return mRS.nScriptGetVarD(getID(mRS), index);
279 }
Stephen Hinesca54ec32010-09-20 17:20:30 -0700280
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700281 /**
Jason Sams67e3d202011-01-09 13:49:01 -0800282 * Only intended for use by generated reflected code.
283 *
Jason Sams67e3d202011-01-09 13:49:01 -0800284 */
Jason Sams4d339932010-05-11 14:03:58 -0700285 public void setVar(int index, int v) {
Jason Samse07694b2012-04-03 15:36:36 -0700286 mRS.nScriptSetVarI(getID(mRS), index, v);
Jason Sams4d339932010-05-11 14:03:58 -0700287 }
Tim Murray7c4caad2013-04-10 16:21:40 -0700288 public int getVarI(int index) {
289 return mRS.nScriptGetVarI(getID(mRS), index);
290 }
291
Jason Sams4d339932010-05-11 14:03:58 -0700292
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700293 /**
Jason Sams67e3d202011-01-09 13:49:01 -0800294 * Only intended for use by generated reflected code.
295 *
Jason Sams67e3d202011-01-09 13:49:01 -0800296 */
Stephen Hines031ec58c2010-10-11 10:54:21 -0700297 public void setVar(int index, long v) {
Jason Samse07694b2012-04-03 15:36:36 -0700298 mRS.nScriptSetVarJ(getID(mRS), index, v);
Stephen Hines031ec58c2010-10-11 10:54:21 -0700299 }
Tim Murray7c4caad2013-04-10 16:21:40 -0700300 public long getVarJ(int index) {
301 return mRS.nScriptGetVarJ(getID(mRS), index);
302 }
303
Stephen Hines031ec58c2010-10-11 10:54:21 -0700304
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700305 /**
Jason Sams67e3d202011-01-09 13:49:01 -0800306 * Only intended for use by generated reflected code.
307 *
Jason Sams67e3d202011-01-09 13:49:01 -0800308 */
Jason Sams0b9a22c2010-07-02 15:35:19 -0700309 public void setVar(int index, boolean v) {
Jason Samse07694b2012-04-03 15:36:36 -0700310 mRS.nScriptSetVarI(getID(mRS), index, v ? 1 : 0);
Jason Sams0b9a22c2010-07-02 15:35:19 -0700311 }
Tim Murray7c4caad2013-04-10 16:21:40 -0700312 public boolean getVarB(int index) {
313 return mRS.nScriptGetVarI(getID(mRS), index) > 0 ? true : false;
314 }
Jason Sams0b9a22c2010-07-02 15:35:19 -0700315
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700316 /**
Jason Sams67e3d202011-01-09 13:49:01 -0800317 * Only intended for use by generated reflected code.
318 *
Jason Sams67e3d202011-01-09 13:49:01 -0800319 */
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800320 public void setVar(int index, BaseObj o) {
Jason Sams678cc7f2014-03-05 16:09:02 -0800321 mRS.validate();
322 mRS.validateObject(o);
Jason Samse07694b2012-04-03 15:36:36 -0700323 mRS.nScriptSetVarObj(getID(mRS), index, (o == null) ? 0 : o.getID(mRS));
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800324 }
325
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700326 /**
Jason Sams67e3d202011-01-09 13:49:01 -0800327 * Only intended for use by generated reflected code.
328 *
Jason Sams67e3d202011-01-09 13:49:01 -0800329 */
Jason Sams4d339932010-05-11 14:03:58 -0700330 public void setVar(int index, FieldPacker v) {
Jason Samse07694b2012-04-03 15:36:36 -0700331 mRS.nScriptSetVarV(getID(mRS), index, v.getData());
Jason Sams69f0d312009-08-03 18:11:17 -0700332 }
333
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700334 /**
Stephen Hinesadeb8092012-04-20 14:26:06 -0700335 * Only intended for use by generated reflected code.
336 *
Stephen Hinesadeb8092012-04-20 14:26:06 -0700337 */
338 public void setVar(int index, FieldPacker v, Element e, int[] dims) {
339 mRS.nScriptSetVarVE(getID(mRS), index, v.getData(), e.getID(mRS), dims);
340 }
341
Jason Samsf64cca92013-04-19 12:56:37 -0700342 /**
343 * Only intended for use by generated reflected code.
344 *
Jason Samsf64cca92013-04-19 12:56:37 -0700345 */
Tim Murray7c4caad2013-04-10 16:21:40 -0700346 public void getVarV(int index, FieldPacker v) {
347 mRS.nScriptGetVarV(getID(mRS), index, v.getData());
348 }
349
Jason Sams22534172009-08-04 16:58:20 -0700350 public void setTimeZone(String timeZone) {
Jason Sams771bebb2009-12-07 12:40:12 -0800351 mRS.validate();
Jason Sams22534172009-08-04 16:58:20 -0700352 try {
Jason Samse07694b2012-04-03 15:36:36 -0700353 mRS.nScriptSetTimeZone(getID(mRS), timeZone.getBytes("UTF-8"));
Jason Sams22534172009-08-04 16:58:20 -0700354 } catch (java.io.UnsupportedEncodingException e) {
355 throw new RuntimeException(e);
356 }
357 }
Jason Sams69f0d312009-08-03 18:11:17 -0700358
Tim Murrayc11e25c2013-04-09 11:01:01 -0700359 /**
360 * Only intended for use by generated reflected code.
361 *
362 */
Jason Sams69f0d312009-08-03 18:11:17 -0700363 public static class Builder {
364 RenderScript mRS;
Jason Sams69f0d312009-08-03 18:11:17 -0700365
366 Builder(RenderScript rs) {
367 mRS = rs;
368 }
Jason Sams69f0d312009-08-03 18:11:17 -0700369 }
370
Jason Sams2d71bc72010-03-26 16:06:43 -0700371
Jason Samsf64cca92013-04-19 12:56:37 -0700372 /**
373 * Only intended for use by generated reflected code.
374 *
375 */
Jason Sams2d71bc72010-03-26 16:06:43 -0700376 public static class FieldBase {
377 protected Element mElement;
Jason Sams2d71bc72010-03-26 16:06:43 -0700378 protected Allocation mAllocation;
379
380 protected void init(RenderScript rs, int dimx) {
Jason Sams5476b452010-12-08 16:14:36 -0800381 mAllocation = Allocation.createSized(rs, mElement, dimx, Allocation.USAGE_SCRIPT);
382 }
383
384 protected void init(RenderScript rs, int dimx, int usages) {
385 mAllocation = Allocation.createSized(rs, mElement, dimx, Allocation.USAGE_SCRIPT | usages);
Jason Sams2d71bc72010-03-26 16:06:43 -0700386 }
387
388 protected FieldBase() {
389 }
390
391 public Element getElement() {
392 return mElement;
393 }
394
395 public Type getType() {
Jason Sams31a7e422010-10-26 13:09:17 -0700396 return mAllocation.getType();
Jason Sams2d71bc72010-03-26 16:06:43 -0700397 }
398
399 public Allocation getAllocation() {
400 return mAllocation;
401 }
402
403 //@Override
404 public void updateAllocation() {
405 }
Jason Sams2d71bc72010-03-26 16:06:43 -0700406 }
Tim Murrayfbfaa852012-12-14 16:01:58 -0800407
Jason Samsf64cca92013-04-19 12:56:37 -0700408
409 /**
410 * Class used to specify clipping for a kernel launch.
411 *
412 */
Tim Murrayfbfaa852012-12-14 16:01:58 -0800413 public static final class LaunchOptions {
Jason Samsf64cca92013-04-19 12:56:37 -0700414 private int xstart = 0;
415 private int ystart = 0;
416 private int xend = 0;
417 private int yend = 0;
418 private int zstart = 0;
419 private int zend = 0;
420 private int strategy;
Tim Murrayfbfaa852012-12-14 16:01:58 -0800421
Jason Samsf64cca92013-04-19 12:56:37 -0700422 /**
423 * Set the X range. If the end value is set to 0 the X dimension is not
424 * clipped.
425 *
426 * @param xstartArg Must be >= 0
427 * @param xendArg Must be >= xstartArg
428 *
429 * @return LaunchOptions
430 */
Tim Murrayeb8c29c2013-02-07 12:16:41 -0800431 public LaunchOptions setX(int xstartArg, int xendArg) {
Tim Murrayfbfaa852012-12-14 16:01:58 -0800432 if (xstartArg < 0 || xendArg <= xstartArg) {
433 throw new RSIllegalArgumentException("Invalid dimensions");
434 }
435 xstart = xstartArg;
436 xend = xendArg;
Tim Murrayeb8c29c2013-02-07 12:16:41 -0800437 return this;
Tim Murrayfbfaa852012-12-14 16:01:58 -0800438 }
439
Jason Samsf64cca92013-04-19 12:56:37 -0700440 /**
441 * Set the Y range. If the end value is set to 0 the Y dimension is not
442 * clipped.
443 *
444 * @param ystartArg Must be >= 0
445 * @param yendArg Must be >= ystartArg
446 *
447 * @return LaunchOptions
448 */
Tim Murrayeb8c29c2013-02-07 12:16:41 -0800449 public LaunchOptions setY(int ystartArg, int yendArg) {
Tim Murrayfbfaa852012-12-14 16:01:58 -0800450 if (ystartArg < 0 || yendArg <= ystartArg) {
451 throw new RSIllegalArgumentException("Invalid dimensions");
452 }
453 ystart = ystartArg;
454 yend = yendArg;
Tim Murrayeb8c29c2013-02-07 12:16:41 -0800455 return this;
Tim Murrayfbfaa852012-12-14 16:01:58 -0800456 }
457
Jason Samsf64cca92013-04-19 12:56:37 -0700458 /**
459 * Set the Z range. If the end value is set to 0 the Z dimension is not
460 * clipped.
461 *
462 * @param zstartArg Must be >= 0
463 * @param zendArg Must be >= zstartArg
464 *
465 * @return LaunchOptions
466 */
Tim Murrayeb8c29c2013-02-07 12:16:41 -0800467 public LaunchOptions setZ(int zstartArg, int zendArg) {
468 if (zstartArg < 0 || zendArg <= zstartArg) {
469 throw new RSIllegalArgumentException("Invalid dimensions");
470 }
471 zstart = zstartArg;
472 zend = zendArg;
473 return this;
474 }
475
476
Jason Samsf64cca92013-04-19 12:56:37 -0700477 /**
478 * Returns the current X start
479 *
480 * @return int current value
481 */
Tim Murrayfbfaa852012-12-14 16:01:58 -0800482 public int getXStart() {
483 return xstart;
484 }
Jason Samsf64cca92013-04-19 12:56:37 -0700485 /**
486 * Returns the current X end
487 *
488 * @return int current value
489 */
Tim Murrayfbfaa852012-12-14 16:01:58 -0800490 public int getXEnd() {
491 return xend;
492 }
Jason Samsf64cca92013-04-19 12:56:37 -0700493 /**
494 * Returns the current Y start
495 *
496 * @return int current value
497 */
Tim Murrayfbfaa852012-12-14 16:01:58 -0800498 public int getYStart() {
499 return ystart;
500 }
Jason Samsf64cca92013-04-19 12:56:37 -0700501 /**
502 * Returns the current Y end
503 *
504 * @return int current value
505 */
Tim Murrayfbfaa852012-12-14 16:01:58 -0800506 public int getYEnd() {
507 return yend;
508 }
Jason Samsf64cca92013-04-19 12:56:37 -0700509 /**
510 * Returns the current Z start
511 *
512 * @return int current value
513 */
Tim Murrayeb8c29c2013-02-07 12:16:41 -0800514 public int getZStart() {
515 return zstart;
516 }
Jason Samsf64cca92013-04-19 12:56:37 -0700517 /**
518 * Returns the current Z end
519 *
520 * @return int current value
521 */
Tim Murrayeb8c29c2013-02-07 12:16:41 -0800522 public int getZEnd() {
523 return zend;
524 }
Tim Murrayfbfaa852012-12-14 16:01:58 -0800525
526 }
Jason Sams69f0d312009-08-03 18:11:17 -0700527}