blob: 6b258aba0faf962401cea5e0be7dca83091fdccf [file] [log] [blame]
Jason Sams0835d422009-08-04 17:58:23 -07001/*
2 * Copyright (C) 2008 The Android Open Source Project
3 *
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
19
20import java.io.IOException;
21import java.io.InputStream;
22
23import android.content.res.Resources;
24import android.os.Bundle;
Jason Sams0835d422009-08-04 17:58:23 -070025import android.util.Log;
26
27import android.graphics.Bitmap;
28import android.graphics.BitmapFactory;
29
Alex Sakhartchouka0c2eb22012-04-19 16:30:58 -070030/** @deprecated renderscript is deprecated in J
Robert Ly11518ac2011-02-09 13:57:06 -080031 * Sampler object which defines how data is extracted from textures. Samplers
32 * are attached to Program objects (currently only ProgramFragment) when those objects
Jason Samsbf6ef8d72010-12-06 15:59:59 -080033 * need to access texture data.
Jason Sams0835d422009-08-04 17:58:23 -070034 **/
35public class Sampler extends BaseObj {
Alex Sakhartchouka0c2eb22012-04-19 16:30:58 -070036 /** @deprecated renderscript is deprecated in J
37 */
Jason Sams0835d422009-08-04 17:58:23 -070038 public enum Value {
Alex Sakhartchouka0c2eb22012-04-19 16:30:58 -070039 /** @deprecated renderscript is deprecated in J
40 */
Jason Sams0835d422009-08-04 17:58:23 -070041 NEAREST (0),
Alex Sakhartchouka0c2eb22012-04-19 16:30:58 -070042 /** @deprecated renderscript is deprecated in J
43 */
Jason Sams0835d422009-08-04 17:58:23 -070044 LINEAR (1),
Alex Sakhartchouka0c2eb22012-04-19 16:30:58 -070045 /** @deprecated renderscript is deprecated in J
46 */
Jason Sams0835d422009-08-04 17:58:23 -070047 LINEAR_MIP_LINEAR (2),
Alex Sakhartchouka0c2eb22012-04-19 16:30:58 -070048 /** @deprecated renderscript is deprecated in J
49 */
Alex Sakhartchouk08571962010-12-15 09:59:58 -080050 LINEAR_MIP_NEAREST (5),
Alex Sakhartchouka0c2eb22012-04-19 16:30:58 -070051 /** @deprecated renderscript is deprecated in J
52 */
Jason Sams0835d422009-08-04 17:58:23 -070053 WRAP (3),
Alex Sakhartchouka0c2eb22012-04-19 16:30:58 -070054 /** @deprecated renderscript is deprecated in J
55 */
Jason Sams0835d422009-08-04 17:58:23 -070056 CLAMP (4);
57
58 int mID;
59 Value(int id) {
60 mID = id;
61 }
62 }
63
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -070064 Value mMin;
65 Value mMag;
66 Value mWrapS;
67 Value mWrapT;
68 Value mWrapR;
69 float mAniso;
70
Jason Sams0835d422009-08-04 17:58:23 -070071 Sampler(int id, RenderScript rs) {
Alex Sakhartchouk0de94442010-08-11 14:41:28 -070072 super(id, rs);
Jason Sams0835d422009-08-04 17:58:23 -070073 }
74
Alex Sakhartchouka0c2eb22012-04-19 16:30:58 -070075 /** @hide renderscript is deprecated in J
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -070076 * @return minification setting for the sampler
77 */
78 public Value getMinification() {
79 return mMin;
80 }
81
Alex Sakhartchouka0c2eb22012-04-19 16:30:58 -070082 /** @hide renderscript is deprecated in J
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -070083 * @return magnification setting for the sampler
84 */
85 public Value getMagnification() {
86 return mMag;
87 }
88
Alex Sakhartchouka0c2eb22012-04-19 16:30:58 -070089 /** @hide renderscript is deprecated in J
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -070090 * @return S wrapping mode for the sampler
91 */
92 public Value getWrapS() {
93 return mWrapS;
94 }
95
Alex Sakhartchouka0c2eb22012-04-19 16:30:58 -070096 /** @hide renderscript is deprecated in J
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -070097 * @return T wrapping mode for the sampler
98 */
99 public Value getWrapT() {
100 return mWrapT;
101 }
102
Alex Sakhartchouka0c2eb22012-04-19 16:30:58 -0700103 /** @hide renderscript is deprecated in J
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -0700104 * @return anisotropy setting for the sampler
105 */
106 public float getAnisotropy() {
107 return mAniso;
108 }
109
Alex Sakhartchouka0c2eb22012-04-19 16:30:58 -0700110 /** @deprecated renderscript is deprecated in J
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800111 * Retrieve a sampler with min and mag set to nearest and wrap modes set to
112 * clamp.
113 *
Alex Sakhartchoukf5c876e2011-01-13 14:53:43 -0800114 * @param rs Context to which the sampler will belong.
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800115 *
116 * @return Sampler
117 */
Jason Sams4d339932010-05-11 14:03:58 -0700118 public static Sampler CLAMP_NEAREST(RenderScript rs) {
119 if(rs.mSampler_CLAMP_NEAREST == null) {
120 Builder b = new Builder(rs);
Alex Sakhartchoukb4d7bb62010-12-21 14:42:26 -0800121 b.setMinification(Value.NEAREST);
122 b.setMagnification(Value.NEAREST);
Jason Sams4d339932010-05-11 14:03:58 -0700123 b.setWrapS(Value.CLAMP);
124 b.setWrapT(Value.CLAMP);
125 rs.mSampler_CLAMP_NEAREST = b.create();
126 }
127 return rs.mSampler_CLAMP_NEAREST;
128 }
129
Alex Sakhartchouka0c2eb22012-04-19 16:30:58 -0700130 /** @deprecated renderscript is deprecated in J
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800131 * Retrieve a sampler with min and mag set to linear and wrap modes set to
132 * clamp.
133 *
Alex Sakhartchoukf5c876e2011-01-13 14:53:43 -0800134 * @param rs Context to which the sampler will belong.
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800135 *
136 * @return Sampler
137 */
Jason Sams4d339932010-05-11 14:03:58 -0700138 public static Sampler CLAMP_LINEAR(RenderScript rs) {
139 if(rs.mSampler_CLAMP_LINEAR == null) {
140 Builder b = new Builder(rs);
Alex Sakhartchoukb4d7bb62010-12-21 14:42:26 -0800141 b.setMinification(Value.LINEAR);
142 b.setMagnification(Value.LINEAR);
Jason Sams4d339932010-05-11 14:03:58 -0700143 b.setWrapS(Value.CLAMP);
144 b.setWrapT(Value.CLAMP);
145 rs.mSampler_CLAMP_LINEAR = b.create();
146 }
147 return rs.mSampler_CLAMP_LINEAR;
148 }
149
Alex Sakhartchouka0c2eb22012-04-19 16:30:58 -0700150 /** @deprecated renderscript is deprecated in J
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800151 * Retrieve a sampler with ag set to linear, min linear mipmap linear, and
152 * to and wrap modes set to clamp.
153 *
Alex Sakhartchoukf5c876e2011-01-13 14:53:43 -0800154 * @param rs Context to which the sampler will belong.
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800155 *
156 * @return Sampler
157 */
Jason Sams4d339932010-05-11 14:03:58 -0700158 public static Sampler CLAMP_LINEAR_MIP_LINEAR(RenderScript rs) {
159 if(rs.mSampler_CLAMP_LINEAR_MIP_LINEAR == null) {
160 Builder b = new Builder(rs);
Alex Sakhartchoukb4d7bb62010-12-21 14:42:26 -0800161 b.setMinification(Value.LINEAR_MIP_LINEAR);
162 b.setMagnification(Value.LINEAR);
Jason Sams4d339932010-05-11 14:03:58 -0700163 b.setWrapS(Value.CLAMP);
164 b.setWrapT(Value.CLAMP);
165 rs.mSampler_CLAMP_LINEAR_MIP_LINEAR = b.create();
166 }
167 return rs.mSampler_CLAMP_LINEAR_MIP_LINEAR;
168 }
169
Alex Sakhartchouka0c2eb22012-04-19 16:30:58 -0700170 /** @deprecated renderscript is deprecated in J
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800171 * Retrieve a sampler with min and mag set to nearest and wrap modes set to
172 * wrap.
173 *
Alex Sakhartchoukf5c876e2011-01-13 14:53:43 -0800174 * @param rs Context to which the sampler will belong.
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800175 *
176 * @return Sampler
177 */
Jason Sams4d339932010-05-11 14:03:58 -0700178 public static Sampler WRAP_NEAREST(RenderScript rs) {
179 if(rs.mSampler_WRAP_NEAREST == null) {
180 Builder b = new Builder(rs);
Alex Sakhartchoukb4d7bb62010-12-21 14:42:26 -0800181 b.setMinification(Value.NEAREST);
182 b.setMagnification(Value.NEAREST);
Jason Sams4d339932010-05-11 14:03:58 -0700183 b.setWrapS(Value.WRAP);
184 b.setWrapT(Value.WRAP);
185 rs.mSampler_WRAP_NEAREST = b.create();
186 }
187 return rs.mSampler_WRAP_NEAREST;
188 }
189
Alex Sakhartchouka0c2eb22012-04-19 16:30:58 -0700190 /** @deprecated renderscript is deprecated in J
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800191 * Retrieve a sampler with min and mag set to nearest and wrap modes set to
192 * wrap.
193 *
Alex Sakhartchoukf5c876e2011-01-13 14:53:43 -0800194 * @param rs Context to which the sampler will belong.
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800195 *
196 * @return Sampler
197 */
Jason Sams4d339932010-05-11 14:03:58 -0700198 public static Sampler WRAP_LINEAR(RenderScript rs) {
199 if(rs.mSampler_WRAP_LINEAR == null) {
200 Builder b = new Builder(rs);
Alex Sakhartchoukb4d7bb62010-12-21 14:42:26 -0800201 b.setMinification(Value.LINEAR);
202 b.setMagnification(Value.LINEAR);
Jason Sams4d339932010-05-11 14:03:58 -0700203 b.setWrapS(Value.WRAP);
204 b.setWrapT(Value.WRAP);
205 rs.mSampler_WRAP_LINEAR = b.create();
206 }
207 return rs.mSampler_WRAP_LINEAR;
208 }
209
Alex Sakhartchouka0c2eb22012-04-19 16:30:58 -0700210 /** @deprecated renderscript is deprecated in J
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800211 * Retrieve a sampler with ag set to linear, min linear mipmap linear, and
212 * to and wrap modes set to wrap.
213 *
Alex Sakhartchoukf5c876e2011-01-13 14:53:43 -0800214 * @param rs Context to which the sampler will belong.
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800215 *
216 * @return Sampler
217 */
Jason Sams4d339932010-05-11 14:03:58 -0700218 public static Sampler WRAP_LINEAR_MIP_LINEAR(RenderScript rs) {
219 if(rs.mSampler_WRAP_LINEAR_MIP_LINEAR == null) {
220 Builder b = new Builder(rs);
Alex Sakhartchoukb4d7bb62010-12-21 14:42:26 -0800221 b.setMinification(Value.LINEAR_MIP_LINEAR);
222 b.setMagnification(Value.LINEAR);
Jason Sams4d339932010-05-11 14:03:58 -0700223 b.setWrapS(Value.WRAP);
224 b.setWrapT(Value.WRAP);
225 rs.mSampler_WRAP_LINEAR_MIP_LINEAR = b.create();
226 }
227 return rs.mSampler_WRAP_LINEAR_MIP_LINEAR;
228 }
229
230
Alex Sakhartchouka0c2eb22012-04-19 16:30:58 -0700231 /** @deprecated renderscript is deprecated in J
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800232 * Builder for creating non-standard samplers. Usefull if mix and match of
233 * wrap modes is necesary or if anisotropic filtering is desired.
234 *
235 */
Jason Sams0835d422009-08-04 17:58:23 -0700236 public static class Builder {
237 RenderScript mRS;
238 Value mMin;
239 Value mMag;
240 Value mWrapS;
241 Value mWrapT;
242 Value mWrapR;
Alex Sakhartchoukf5b35102010-09-30 11:36:37 -0700243 float mAniso;
Jason Sams0835d422009-08-04 17:58:23 -0700244
245 public Builder(RenderScript rs) {
246 mRS = rs;
247 mMin = Value.NEAREST;
248 mMag = Value.NEAREST;
249 mWrapS = Value.WRAP;
250 mWrapT = Value.WRAP;
251 mWrapR = Value.WRAP;
Alex Sakhartchoukf5b35102010-09-30 11:36:37 -0700252 mAniso = 1.0f;
Jason Sams0835d422009-08-04 17:58:23 -0700253 }
254
Alex Sakhartchoukb4d7bb62010-12-21 14:42:26 -0800255 public void setMinification(Value v) {
Jason Sams8bb41dd2009-12-16 15:59:59 -0800256 if (v == Value.NEAREST ||
257 v == Value.LINEAR ||
Alex Sakhartchouk08571962010-12-15 09:59:58 -0800258 v == Value.LINEAR_MIP_LINEAR ||
259 v == Value.LINEAR_MIP_NEAREST) {
Jason Sams8bb41dd2009-12-16 15:59:59 -0800260 mMin = v;
261 } else {
262 throw new IllegalArgumentException("Invalid value");
263 }
Jason Sams0835d422009-08-04 17:58:23 -0700264 }
265
Alex Sakhartchoukb4d7bb62010-12-21 14:42:26 -0800266 public void setMagnification(Value v) {
Jason Sams8bb41dd2009-12-16 15:59:59 -0800267 if (v == Value.NEAREST || v == Value.LINEAR) {
268 mMag = v;
269 } else {
270 throw new IllegalArgumentException("Invalid value");
271 }
Jason Sams0835d422009-08-04 17:58:23 -0700272 }
273
274 public void setWrapS(Value v) {
Jason Sams8bb41dd2009-12-16 15:59:59 -0800275 if (v == Value.WRAP || v == Value.CLAMP) {
276 mWrapS = v;
277 } else {
278 throw new IllegalArgumentException("Invalid value");
279 }
Jason Sams0835d422009-08-04 17:58:23 -0700280 }
281
282 public void setWrapT(Value v) {
Jason Sams8bb41dd2009-12-16 15:59:59 -0800283 if (v == Value.WRAP || v == Value.CLAMP) {
284 mWrapT = v;
285 } else {
286 throw new IllegalArgumentException("Invalid value");
287 }
Jason Sams0835d422009-08-04 17:58:23 -0700288 }
289
Alex Sakhartchoukf5b35102010-09-30 11:36:37 -0700290 public void setAnisotropy(float v) {
291 if(v >= 0.0f) {
292 mAniso = v;
293 } else {
294 throw new IllegalArgumentException("Invalid value");
295 }
296 }
297
Jason Sams0835d422009-08-04 17:58:23 -0700298 public Sampler create() {
Jason Sams771bebb2009-12-07 12:40:12 -0800299 mRS.validate();
Alex Sakhartchouk918e8402012-04-11 14:04:23 -0700300 int id = mRS.nSamplerCreate(mMag.mID, mMin.mID,
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -0700301 mWrapS.mID, mWrapT.mID, mWrapR.mID, mAniso);
302 Sampler sampler = new Sampler(id, mRS);
303 sampler.mMin = mMin;
304 sampler.mMag = mMag;
305 sampler.mWrapS = mWrapS;
306 sampler.mWrapT = mWrapT;
307 sampler.mWrapR = mWrapR;
308 sampler.mAniso = mAniso;
309 return sampler;
Jason Sams0835d422009-08-04 17:58:23 -0700310 }
311 }
312
313}
314