Project

General

Profile

Download (20.4 KB) Statistics
| Branch: | Revision:

examples / src / main / java / org / distorted / examples / effects3d / Effects3DActivity.java @ f338550a

1 08f92d82 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2016 Leszek Koltunski                                                               //
3
//                                                                                               //
4
// This file is part of Distorted.                                                               //
5
//                                                                                               //
6
// Distorted is free software: you can redistribute it and/or modify                             //
7
// it under the terms of the GNU General Public License as published by                          //
8
// the Free Software Foundation, either version 2 of the License, or                             //
9
// (at your option) any later version.                                                           //
10
//                                                                                               //
11
// Distorted is distributed in the hope that it will be useful,                                  //
12
// but WITHOUT ANY WARRANTY; without even the implied warranty of                                //
13
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                 //
14
// GNU General Public License for more details.                                                  //
15
//                                                                                               //
16
// You should have received a copy of the GNU General Public License                             //
17
// along with Distorted.  If not, see <http://www.gnu.org/licenses/>.                            //
18
///////////////////////////////////////////////////////////////////////////////////////////////////
19
20 76a81b6a Leszek Koltunski
package org.distorted.examples.effects3d;
21 08f92d82 Leszek Koltunski
22
import android.app.Activity;
23 9167cfd4 Leszek Koltunski
import android.graphics.Bitmap;
24
import android.graphics.BitmapFactory;
25
import android.graphics.Canvas;
26
import android.graphics.Paint;
27 08f92d82 Leszek Koltunski
import android.opengl.GLSurfaceView;
28
import android.os.Bundle;
29 d40cfeb2 Leszek Koltunski
import android.view.Gravity;
30 08f92d82 Leszek Koltunski
import android.view.View;
31 50ac40a6 Leszek Koltunski
import android.widget.AdapterView;
32
import android.widget.ArrayAdapter;
33 d40cfeb2 Leszek Koltunski
import android.widget.Button;
34 08f92d82 Leszek Koltunski
import android.widget.LinearLayout;
35 d40cfeb2 Leszek Koltunski
import android.widget.NumberPicker;
36 50ac40a6 Leszek Koltunski
import android.widget.Spinner;
37 d40cfeb2 Leszek Koltunski
import android.widget.TableRow;
38 08f92d82 Leszek Koltunski
39
import org.distorted.examples.R;
40
import org.distorted.library.Distorted;
41 b01acdaf Leszek Koltunski
import org.distorted.library.MeshCubes;
42
import org.distorted.library.MeshFlat;
43
import org.distorted.library.MeshObject;
44 f6d884d5 Leszek Koltunski
import org.distorted.library.DistortedTexture;
45 d04a4886 Leszek Koltunski
import org.distorted.library.DistortedEffects;
46 08f92d82 Leszek Koltunski
import org.distorted.library.EffectNames;
47 56cbe1cf Leszek Koltunski
import org.distorted.library.EffectTypes;
48
49 9167cfd4 Leszek Koltunski
import java.io.IOException;
50
import java.io.InputStream;
51 56cbe1cf Leszek Koltunski
import java.util.ArrayList;
52 08f92d82 Leszek Koltunski
53
///////////////////////////////////////////////////////////////////////////////////////////////////
54
55 76a81b6a Leszek Koltunski
public class Effects3DActivity extends Activity
56 bfcf419a Leszek Koltunski
                               implements View.OnClickListener,
57
                                          AdapterView.OnItemSelectedListener
58 d40cfeb2 Leszek Koltunski
  {
59 50ac40a6 Leszek Koltunski
  private static final int COLOR_OFF = 0xffffe81f;
60
  private static final int COLOR_ON  = 0xff0000ff;
61 bfcf419a Leszek Koltunski
  private static final int COLOR_INAC= 0xff00ff00;
62 50ac40a6 Leszek Koltunski
63 56cbe1cf Leszek Koltunski
  private int mNumCols = 10;
64
  private int mNumRows = 10;
65 2e755580 Leszek Koltunski
  private boolean mGridInitialized;
66 d40cfeb2 Leszek Koltunski
  private NumberPicker mColsPicker, mRowsPicker;
67 50ac40a6 Leszek Koltunski
  private boolean[] mShape;
68 f6d884d5 Leszek Koltunski
  private DistortedTexture mTexture;
69 d04a4886 Leszek Koltunski
  private DistortedEffects mEffects;
70 b01acdaf Leszek Koltunski
  private MeshObject mMesh;
71 bcc8e016 Leszek Koltunski
  private int mObjectType;
72 cdc515b9 Leszek Koltunski
  private int mBitmapID;
73
  private Bitmap mBitmap;
74 bfcf419a Leszek Koltunski
  private LinearLayout mLay;
75 d40cfeb2 Leszek Koltunski
76 d04a4886 Leszek Koltunski
  private ArrayList<Effects3DEffect> mList;
77 56cbe1cf Leszek Koltunski
  private int mEffectAdd;
78 334c13fa Leszek Koltunski
  private float mCenterX, mCenterY, mCenterZ;
79 6f779cd4 Leszek Koltunski
  private float mRegionX, mRegionY, mRegionR;
80 50ac40a6 Leszek Koltunski
81 8fd9f5fa Leszek Koltunski
  private EffectNames[] mEffectNames;
82 24991bc2 Leszek Koltunski
83 47833473 Leszek Koltunski
  private static boolean mSupportsRegion;
84 4d5b37fe Leszek Koltunski
  private static boolean mSupportsCenter;
85 24991bc2 Leszek Koltunski
86 08f92d82 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
87 56cbe1cf Leszek Koltunski
88 d40cfeb2 Leszek Koltunski
  @Override
89
  protected void onCreate(Bundle savedState)
90
    {
91
    super.onCreate(savedState);
92
93 d04a4886 Leszek Koltunski
    mList = new ArrayList<>();
94 56cbe1cf Leszek Koltunski
95 8fd9f5fa Leszek Koltunski
    createEffectNames();
96
97 50ac40a6 Leszek Koltunski
    setContentView(R.layout.objectpickerlayout);
98 d40cfeb2 Leszek Koltunski
99 bfcf419a Leszek Koltunski
    mLay = (LinearLayout)findViewById(R.id.objectpicker_buttongrid);
100
101 50ac40a6 Leszek Koltunski
    mColsPicker = (NumberPicker)findViewById(R.id.objectpicker_cols);
102
    mRowsPicker = (NumberPicker)findViewById(R.id.objectpicker_rows);
103 d40cfeb2 Leszek Koltunski
104 9758b1ec Leszek Koltunski
    mColsPicker.setMaxValue(40);
105 d40cfeb2 Leszek Koltunski
    mColsPicker.setMinValue( 0);
106 9758b1ec Leszek Koltunski
    mRowsPicker.setMaxValue(40);
107 d40cfeb2 Leszek Koltunski
    mRowsPicker.setMinValue( 0);
108
109
    mColsPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener()
110 bfcf419a Leszek Koltunski
         {
111
         @Override
112
         public void onValueChange(NumberPicker picker, int oldVal, int newVal)
113
           {
114
           setGrid();
115
           }
116
         });
117 d40cfeb2 Leszek Koltunski
118
    mRowsPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener()
119 bfcf419a Leszek Koltunski
         {
120
         @Override
121
         public void onValueChange(NumberPicker picker, int oldVal, int newVal)
122
           {
123
           setGrid();
124
           }
125
         });
126 d40cfeb2 Leszek Koltunski
127 50ac40a6 Leszek Koltunski
    mObjectType = 0;
128 2e755580 Leszek Koltunski
    mGridInitialized = false;
129 d40cfeb2 Leszek Koltunski
130 50ac40a6 Leszek Koltunski
    Spinner typeSpinner  = (Spinner)findViewById(R.id.objectpicker_spinnerType);
131
    typeSpinner.setOnItemSelectedListener(this);
132 d40cfeb2 Leszek Koltunski
133 bfcf419a Leszek Koltunski
    String[] objectType = new String[] {"Mesh: Cubes", "Mesh: Flat"};
134 d40cfeb2 Leszek Koltunski
135 bcc8e016 Leszek Koltunski
    ArrayAdapter<String> adapterType = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, objectType);
136
    adapterType.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
137
    typeSpinner.setAdapter(adapterType);
138
139
    Spinner bitmapSpinner  = (Spinner)findViewById(R.id.objectpicker_spinnerBitmap);
140
    bitmapSpinner.setOnItemSelectedListener(this);
141
142 bfcf419a Leszek Koltunski
    String[] objectBitmap = new String[] { "Texture: Grid", "Texture: Girl", "Texture: Dog", "Texture: Cat",
143
                                           "Texture: Squares", "Texture: Bean", "Texture: Lisa" };
144 bcc8e016 Leszek Koltunski
145
    ArrayAdapter<String> adapterBitmap = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, objectBitmap);
146
    adapterBitmap.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
147
    bitmapSpinner.setAdapter(adapterBitmap);
148 d40cfeb2 Leszek Koltunski
    }
149
150 8fd9f5fa Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
151
152
  private void createEffectNames()
153
    {
154 76a81b6a Leszek Koltunski
    EffectTypes type1 = EffectTypes.FRAGMENT;
155
    EffectTypes type2 = EffectTypes.VERTEX;
156
157 8fd9f5fa Leszek Koltunski
    EffectNames[] names = EffectNames.values();
158
159 76a81b6a Leszek Koltunski
    int numEffects=0;
160 8fd9f5fa Leszek Koltunski
161
    for(int i=0; i<names.length; i++)
162 76a81b6a Leszek Koltunski
      if( names[i].getType() == type1 || names[i].getType() == type2 ) numEffects++;
163 8fd9f5fa Leszek Koltunski
164 76a81b6a Leszek Koltunski
    mEffectNames = new EffectNames[numEffects];
165 8fd9f5fa Leszek Koltunski
166 76a81b6a Leszek Koltunski
    numEffects=0;
167 8fd9f5fa Leszek Koltunski
168
    for(int i=0; i<names.length; i++)
169 76a81b6a Leszek Koltunski
      if( names[i].getType() == type1 || names[i].getType() == type2 )
170 8fd9f5fa Leszek Koltunski
        {
171 76a81b6a Leszek Koltunski
        mEffectNames[numEffects++] = names[i];
172 8fd9f5fa Leszek Koltunski
        }
173
    }
174
175 d40cfeb2 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
176
177 50ac40a6 Leszek Koltunski
  private void setGrid()
178 d40cfeb2 Leszek Koltunski
    {
179 2e755580 Leszek Koltunski
    mGridInitialized = true;
180
181 bfcf419a Leszek Koltunski
    mNumCols = mColsPicker.getValue();
182
    mNumRows = mRowsPicker.getValue();
183 d40cfeb2 Leszek Koltunski
184 bfcf419a Leszek Koltunski
    int width = mLay.getWidth();
185
    int height= mLay.getHeight();
186 57ba16f3 Leszek Koltunski
    int w = mNumCols>0 ? (int)( 0.9f*width / mNumCols) : 0;
187
    int h = mNumRows>0 ? (int)( 0.9f*height/ mNumRows) : 0;
188 d40cfeb2 Leszek Koltunski
    int size= w<h ? w:h;
189 57ba16f3 Leszek Koltunski
    int pad = size<20 ? 1 : size/20;
190 d40cfeb2 Leszek Koltunski
191 bfcf419a Leszek Koltunski
    mLay.removeAllViews();
192 d40cfeb2 Leszek Koltunski
193
    mShape = new boolean[mNumRows*mNumCols];
194
195 56cbe1cf Leszek Koltunski
    TableRow.LayoutParams p = new TableRow.LayoutParams();
196 d40cfeb2 Leszek Koltunski
197
    p.rightMargin  = pad;
198
    p.leftMargin   = pad;
199
    p.topMargin    = pad;
200
    p.bottomMargin = pad;
201
    p.height       = size;
202
    p.width        = size;
203
204
    for (int rows=0; rows<mNumRows; rows++)
205 08f92d82 Leszek Koltunski
      {
206 d40cfeb2 Leszek Koltunski
      TableRow tr = new TableRow(this);
207
      tr.setGravity(Gravity.CENTER);
208
209
      for(int cols=0; cols<mNumCols; cols++)
210
        {
211
        Button b = new Button(this);
212
        b.setOnClickListener(this);
213
        b.setId(rows*mNumCols+cols);
214
        b.setLayoutParams(p);
215 bfcf419a Leszek Koltunski
        b.setBackgroundColor(mObjectType==1 ? COLOR_INAC : COLOR_ON);
216 d40cfeb2 Leszek Koltunski
        tr.addView(b, p);
217 bcc8e016 Leszek Koltunski
        mShape[rows*mNumCols+cols] = true;
218 d40cfeb2 Leszek Koltunski
        }
219
220 bfcf419a Leszek Koltunski
      mLay.addView(tr);
221 d40cfeb2 Leszek Koltunski
      }
222
    }
223
224 50ac40a6 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
225
226 f6d884d5 Leszek Koltunski
  public DistortedTexture getTexture()
227 50ac40a6 Leszek Koltunski
    {
228 f6d884d5 Leszek Koltunski
    return mTexture;
229
    }
230
231
///////////////////////////////////////////////////////////////////////////////////////////////////
232
233 d04a4886 Leszek Koltunski
  public DistortedEffects getEffects()
234 f6d884d5 Leszek Koltunski
    {
235 d04a4886 Leszek Koltunski
    return mEffects;
236 50ac40a6 Leszek Koltunski
    }
237
238 e8b6aa95 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
239
240 7fca6741 Leszek Koltunski
  public MeshObject getMesh()
241 e8b6aa95 Leszek Koltunski
    {
242 b01acdaf Leszek Koltunski
    return mMesh;
243 e8b6aa95 Leszek Koltunski
    }
244
245 24991bc2 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
246
247 f338550a leszek
  public void setSupportsRegion(boolean supports)
248 24991bc2 Leszek Koltunski
    {
249 f338550a leszek
    if( mSupportsRegion != supports )
250
      {
251
      mSupportsRegion = supports;
252
      Effects3DSurfaceView view = (Effects3DSurfaceView) findViewById(R.id.effects3dSurfaceView);
253
      view.getRenderer().attachRegion(supports);
254
      }
255 24991bc2 Leszek Koltunski
    }
256
257 76a81b6a Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
258
259 f338550a leszek
  public void setSupportsCenter(boolean supports)
260 76a81b6a Leszek Koltunski
    {
261 f338550a leszek
    if( mSupportsCenter != supports )
262
      {
263
      mSupportsCenter = supports;
264
      Effects3DSurfaceView view = (Effects3DSurfaceView) findViewById(R.id.effects3dSurfaceView);
265
      view.getRenderer().attachCenter(supports);
266
      }
267 76a81b6a Leszek Koltunski
    }
268
269 d40cfeb2 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
270
271 9167cfd4 Leszek Koltunski
  public Bitmap getBitmap()
272 d40cfeb2 Leszek Koltunski
    {
273 cdc515b9 Leszek Koltunski
    if( mBitmap==null )
274 9167cfd4 Leszek Koltunski
      {
275 cdc515b9 Leszek Koltunski
      if( mBitmapID!=-1)
276 9167cfd4 Leszek Koltunski
        {
277 cdc515b9 Leszek Koltunski
        InputStream is = getResources().openRawResource(mBitmapID);
278
279 9167cfd4 Leszek Koltunski
        try
280
          {
281 cdc515b9 Leszek Koltunski
          mBitmap = BitmapFactory.decodeStream(is);
282
          }
283
        finally
284
          {
285
          try
286
            {
287
            is.close();
288
            }
289
          catch(IOException e) { }
290 9167cfd4 Leszek Koltunski
          }
291
        }
292 cdc515b9 Leszek Koltunski
      else
293
        {
294
        final int W = 640;
295
        final int H = 640;
296 9167cfd4 Leszek Koltunski
297 cdc515b9 Leszek Koltunski
        Paint paint = new Paint();
298
        mBitmap = Bitmap.createBitmap(W,H, Bitmap.Config.ARGB_8888);
299
        Canvas canvas = new Canvas(mBitmap);
300 9167cfd4 Leszek Koltunski
301 cdc515b9 Leszek Koltunski
        paint.setAntiAlias(true);
302
        paint.setTextAlign(Paint.Align.CENTER);
303
        paint.setColor(0xff008800);
304
        paint.setStyle(Paint.Style.FILL);
305
        canvas.drawRect(0, 0, W, H, paint);
306
        paint.setColor(0xffffffff);
307 9167cfd4 Leszek Koltunski
308 cdc515b9 Leszek Koltunski
        for(int i=0; i<=mNumCols ; i++ )
309
          {
310
          canvas.drawRect(W*i/mNumCols - 1,                0,  W*i/mNumCols + 1,  H               , paint);
311
          canvas.drawRect(               0, H *i/mNumCols -1,  W               ,  H*i/mNumCols + 1, paint);
312
          }
313 9167cfd4 Leszek Koltunski
        }
314
      }
315
316 cdc515b9 Leszek Koltunski
    return mBitmap;
317 d40cfeb2 Leszek Koltunski
    }
318
319
///////////////////////////////////////////////////////////////////////////////////////////////////
320
321 56cbe1cf Leszek Koltunski
  public void onClick(View view)
322 d40cfeb2 Leszek Koltunski
    {
323 bfcf419a Leszek Koltunski
    if( mObjectType!=1 )
324
      {
325
      Button tmp = (Button)view;
326
      int id = tmp.getId();
327
      mShape[id] = !mShape[id];
328
      tmp.setBackgroundColor(mShape[id] ? COLOR_ON:COLOR_OFF);
329
      }
330
    }
331
332
///////////////////////////////////////////////////////////////////////////////////////////////////
333
334
  private void uncheckAll()
335
    {
336
    TableRow tr;
337
    Button butt;
338
339
    for (int row=0; row<mNumRows; row++)
340
      {
341
      tr = (TableRow)mLay.getChildAt(row);
342
343
      for(int col=0; col<mNumCols; col++)
344
        {
345
        butt = (Button)tr.getVirtualChildAt(col);
346
        butt.setBackgroundColor(mObjectType==1 ? COLOR_INAC : COLOR_ON);
347
        mShape[row*mNumCols+col] = true;
348
        }
349
      }
350 bcc8e016 Leszek Koltunski
    }
351
352 6f779cd4 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
353
354
  public void setRegion(float x, float y, float r)
355
    {
356
    mRegionX = x;
357 24991bc2 Leszek Koltunski
    mRegionY =-y;
358 6f779cd4 Leszek Koltunski
    mRegionR = r;
359
360 76a81b6a Leszek Koltunski
    Effects3DSurfaceView view = (Effects3DSurfaceView)findViewById(R.id.effects3dSurfaceView);
361 6f779cd4 Leszek Koltunski
362
    view.getRenderer().setRegion(mRegionX, mRegionY, mRegionR);
363
    }
364
365 950511ed Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
366
367 334c13fa Leszek Koltunski
  public void setCenter(float x, float y, float z)
368 950511ed Leszek Koltunski
    {
369
    mCenterX = x;
370
    mCenterY = y;
371 334c13fa Leszek Koltunski
    mCenterZ = z;
372 950511ed Leszek Koltunski
373 76a81b6a Leszek Koltunski
    Effects3DSurfaceView view = (Effects3DSurfaceView)findViewById(R.id.effects3dSurfaceView);
374 950511ed Leszek Koltunski
375 334c13fa Leszek Koltunski
    view.getRenderer().setCenter( mCenterX, mCenterY, mCenterZ );
376 950511ed Leszek Koltunski
    }
377
378
///////////////////////////////////////////////////////////////////////////////////////////////////
379
380
  public float getCenterX()
381
    {
382
    return mCenterX;
383
    }
384
385
///////////////////////////////////////////////////////////////////////////////////////////////////
386
387
  public float getCenterY()
388
    {
389
    return mCenterY;
390
    }
391
392 334c13fa Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
393
394
  public float getCenterZ()
395
    {
396
    return mCenterZ;
397
    }
398
399 6f779cd4 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
400
401
  public float getRegionX()
402
    {
403
    return mRegionX;
404
    }
405
406
///////////////////////////////////////////////////////////////////////////////////////////////////
407
408
  public float getRegionY()
409
    {
410
    return mRegionY;
411
    }
412
413
///////////////////////////////////////////////////////////////////////////////////////////////////
414
415
  public float getRegionR()
416
    {
417
    return mRegionR;
418
    }
419
420 bcc8e016 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
421 50ac40a6 Leszek Koltunski
422 bfcf419a Leszek Koltunski
  public void Create(View v)
423 bcc8e016 Leszek Koltunski
    {
424 76f9798b Leszek Koltunski
    DistortedEffects.setMaxVertex(20);    // those have to be called before
425
    DistortedEffects.setMaxFragment(3);   // any DistortedEffect get created!
426 a98db446 Leszek Koltunski
427 50ac40a6 Leszek Koltunski
    if( mObjectType==1 )
428
      {
429 bfcf419a Leszek Koltunski
      mMesh = new MeshFlat(mNumCols,mNumRows);
430 50ac40a6 Leszek Koltunski
      }
431
    else
432
      {
433 bfcf419a Leszek Koltunski
      String str = "";
434 50ac40a6 Leszek Koltunski
435 bfcf419a Leszek Koltunski
      for(int i=0; i<mNumRows*mNumCols; i++)
436
        str += mShape[i] ? "1" : "0";
437 50ac40a6 Leszek Koltunski
438 bfcf419a Leszek Koltunski
      mMesh = new MeshCubes(mNumCols, str, false);
439 50ac40a6 Leszek Koltunski
      }
440 bcc8e016 Leszek Koltunski
441 bfcf419a Leszek Koltunski
    mEffects= new DistortedEffects();
442
    mTexture= new DistortedTexture(mNumCols,mNumRows);
443 bcc8e016 Leszek Koltunski
444 bfcf419a Leszek Koltunski
    resetData();
445 bcc8e016 Leszek Koltunski
446 bfcf419a Leszek Koltunski
    final View view = getLayoutInflater().inflate(R.layout.effects3dlayout, null);
447 bcc8e016 Leszek Koltunski
448 bfcf419a Leszek Koltunski
    setContentView(view);
449 bcc8e016 Leszek Koltunski
450 bfcf419a Leszek Koltunski
    String[] effects = new String[mEffectNames.length];
451 50ac40a6 Leszek Koltunski
452 bfcf419a Leszek Koltunski
    for(int i=0; i<mEffectNames.length; i++) effects[i] = mEffectNames[i].name();
453
454
    Spinner effectSpinner = (Spinner)findViewById(R.id.effects3dspinner );
455
    effectSpinner.setOnItemSelectedListener(this);
456
457
    ArrayAdapter<String> adapterEffect = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, effects);
458
    adapterEffect.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
459
    effectSpinner.setAdapter(adapterEffect);
460
461
    mEffectAdd = 0;
462 d40cfeb2 Leszek Koltunski
    }
463
464 50ac40a6 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
465
466
  public void onItemSelected(AdapterView<?> parent, View view, int pos, long id)
467
    {
468
    switch(parent.getId())
469
      {
470 bfcf419a Leszek Koltunski
      case R.id.objectpicker_spinnerType  : if( mObjectType!=pos )
471
                                              {
472
                                              mObjectType = pos;
473
                                              uncheckAll();
474
                                              }
475 56cbe1cf Leszek Koltunski
                                            break;
476 bcc8e016 Leszek Koltunski
      case R.id.objectpicker_spinnerBitmap: switch(pos)
477
                                              {
478 cdc515b9 Leszek Koltunski
                                              case 0: mBitmapID = -1        ; break;
479
                                              case 1: mBitmapID = R.raw.face; break;
480
                                              case 2: mBitmapID = R.raw.dog ; break;
481
                                              case 3: mBitmapID = R.raw.cat ; break;
482
                                              case 4: mBitmapID = R.raw.grid; break;
483
                                              case 5: mBitmapID = R.raw.bean; break;
484
                                              case 6: mBitmapID = R.raw.monalisa; break;
485 bcc8e016 Leszek Koltunski
                                              }
486
                                            break;
487 76a81b6a Leszek Koltunski
      case R.id.effects3dspinner          : mEffectAdd = pos;
488 56cbe1cf Leszek Koltunski
                                            break;
489 50ac40a6 Leszek Koltunski
      }
490
    }
491
492
///////////////////////////////////////////////////////////////////////////////////////////////////
493
494
  public void onNothingSelected(AdapterView<?> parent)
495
    {
496
    }
497
498 d40cfeb2 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
499
500 56cbe1cf Leszek Koltunski
  public int getWidth()
501 d40cfeb2 Leszek Koltunski
    {
502 f6d884d5 Leszek Koltunski
    return mTexture==null ? 0: mTexture.getWidth();
503 d40cfeb2 Leszek Koltunski
    }
504 08f92d82 Leszek Koltunski
505
///////////////////////////////////////////////////////////////////////////////////////////////////
506
507 56cbe1cf Leszek Koltunski
  public int getHeight()
508 d40cfeb2 Leszek Koltunski
    {
509 f6d884d5 Leszek Koltunski
    return mTexture==null ? 0: mTexture.getHeight();
510 d40cfeb2 Leszek Koltunski
    }
511 08f92d82 Leszek Koltunski
512 334c13fa Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
513
514
  public int getDepth()
515
    {
516 b01acdaf Leszek Koltunski
    return mTexture==null ? 0: mTexture.getDepth(mMesh);
517 334c13fa Leszek Koltunski
    }
518
519
///////////////////////////////////////////////////////////////////////////////////////////////////
520
521
  public int getScreenWidth()
522
    {
523
    return 0;
524
    }
525
526 08f92d82 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
527
528 6f779cd4 Leszek Koltunski
  private void resetData()
529 d40cfeb2 Leszek Koltunski
    {
530 950511ed Leszek Koltunski
    mCenterX = 0.5f*getWidth();
531
    mCenterY = 0.5f*getHeight();
532 6f779cd4 Leszek Koltunski
    mRegionX = 0;
533
    mRegionY = 0;
534
    mRegionR = getWidth()/2;
535 47833473 Leszek Koltunski
536 f338550a leszek
    mSupportsRegion =false;
537 4d5b37fe Leszek Koltunski
    mSupportsCenter =false;
538 f338550a leszek
/*
539
    Effects3DSurfaceView view = (Effects3DSurfaceView) findViewById(R.id.effects3dSurfaceView);
540
    view.getRenderer().attachRegion(false);
541
    view.getRenderer().attachCenter(false);
542
*/
543 6f779cd4 Leszek Koltunski
    }
544
545
///////////////////////////////////////////////////////////////////////////////////////////////////
546
// 'second screen' methods
547
548 56cbe1cf Leszek Koltunski
  public void newEffect(View v)
549 794e6c4f Leszek Koltunski
    {
550 76a81b6a Leszek Koltunski
    Effects3DEffect eff = new Effects3DEffect(mEffectNames[mEffectAdd], this);
551 d04a4886 Leszek Koltunski
    mList.add(eff);
552 d2337a3a Leszek Koltunski
553 76a81b6a Leszek Koltunski
    LinearLayout layout = (LinearLayout)findViewById(R.id.effects3dlayout);
554 56cbe1cf Leszek Koltunski
    View view = eff.createView();
555
    layout.addView(view);
556 950511ed Leszek Koltunski
557 4d5b37fe Leszek Koltunski
    if( mSupportsCenter )
558 76a81b6a Leszek Koltunski
      {
559
      View center = eff.createCenter();
560
      layout.addView(center);
561
      }
562
563
    if( mSupportsRegion )
564 950511ed Leszek Koltunski
      {
565
      View region = eff.createRegion();
566
      layout.addView(region);
567
      }
568
569 d04a4886 Leszek Koltunski
    eff.apply(mEffects);
570 d2337a3a Leszek Koltunski
    }
571
572
///////////////////////////////////////////////////////////////////////////////////////////////////
573
574 56cbe1cf Leszek Koltunski
  public void removeAll(View v)
575 d2337a3a Leszek Koltunski
    {
576 d04a4886 Leszek Koltunski
    mList.clear();
577 76a81b6a Leszek Koltunski
    LinearLayout layout = (LinearLayout)findViewById(R.id.effects3dlayout);
578 56cbe1cf Leszek Koltunski
    layout.removeAllViews();
579 d04a4886 Leszek Koltunski
    mEffects.abortEffects(EffectTypes.VERTEX);
580
    mEffects.abortEffects(EffectTypes.FRAGMENT);
581 950511ed Leszek Koltunski
582 6f779cd4 Leszek Koltunski
    resetData();
583 950511ed Leszek Koltunski
584 76a81b6a Leszek Koltunski
    Effects3DSurfaceView view = (Effects3DSurfaceView)findViewById(R.id.effects3dSurfaceView);
585
    Effects3DRenderer renderer= view.getRenderer();
586 950511ed Leszek Koltunski
587 334c13fa Leszek Koltunski
    renderer.setCenter( mCenterX, mCenterY, mCenterZ );
588 6f779cd4 Leszek Koltunski
    renderer.setRegion( mRegionX, mRegionY, mRegionR );
589 950511ed Leszek Koltunski
    renderer.mQuat1.set(0,0,0,1);
590
    renderer.mQuat2.set(0,0,0,1);
591 d2337a3a Leszek Koltunski
    }
592
593 de82c8b7 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
594
595
  public void remove(View v)
596
    {
597 d04a4886 Leszek Koltunski
    for(Effects3DEffect effect: mList)
598 fa9053f5 Leszek Koltunski
      {
599
      if( effect.thisView(v) )
600
        {
601 fed00329 Leszek Koltunski
        LinearLayout layout = (LinearLayout)findViewById(R.id.effects3dlayout);
602
        View view;
603
604
        view = effect.getEffect();
605
        if( view!=null ) layout.removeView(view);
606
        view = effect.getCenter();
607
        if( view!=null ) layout.removeView(view);
608
        view = effect.getRegion();
609
        if( view!=null ) layout.removeView(view);
610
611 d04a4886 Leszek Koltunski
        mEffects.abortEffect(effect.getId());
612
        mList.remove(effect);
613 adc117e0 Leszek Koltunski
614
        resetData();
615 fed00329 Leszek Koltunski
616
        break;
617 fa9053f5 Leszek Koltunski
        }
618
      }
619 de82c8b7 Leszek Koltunski
    }
620
621 08f92d82 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
622 d40cfeb2 Leszek Koltunski
// Overrides
623
624
  @Override
625
  protected void onPause()
626
    {
627 76a81b6a Leszek Koltunski
    GLSurfaceView mView = (GLSurfaceView)findViewById(R.id.effects3dSurfaceView);
628 d40cfeb2 Leszek Koltunski
    if( mView!=null ) mView.onPause();
629
    super.onPause();
630
    }
631 08f92d82 Leszek Koltunski
632
///////////////////////////////////////////////////////////////////////////////////////////////////
633
    
634 d40cfeb2 Leszek Koltunski
  @Override
635
  protected void onResume()
636
    {
637
    super.onResume();
638 76a81b6a Leszek Koltunski
    GLSurfaceView mView = (GLSurfaceView)findViewById(R.id.effects3dSurfaceView);
639 d40cfeb2 Leszek Koltunski
    if( mView!=null ) mView.onResume();
640
    }
641 08f92d82 Leszek Koltunski
642
///////////////////////////////////////////////////////////////////////////////////////////////////
643
    
644 d40cfeb2 Leszek Koltunski
  @Override
645
  public void onWindowFocusChanged(boolean hasFocus)
646
    {
647
    super.onWindowFocusChanged(hasFocus);
648
649 bfcf419a Leszek Koltunski
    mColsPicker.setValue(mNumCols);
650
    mRowsPicker.setValue(mNumRows);
651
652 2e755580 Leszek Koltunski
    if( !mGridInitialized ) setGrid();
653 d40cfeb2 Leszek Koltunski
    }
654 08f92d82 Leszek Koltunski
655
///////////////////////////////////////////////////////////////////////////////////////////////////
656
    
657 d40cfeb2 Leszek Koltunski
  @Override
658
  protected void onDestroy()
659
    {
660
    Distorted.onDestroy();
661
    super.onDestroy();
662
    }
663 08f92d82 Leszek Koltunski
664 d40cfeb2 Leszek Koltunski
  }