Project

General

Profile

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

examples / src / main / java / org / distorted / examples / matrix3d / Matrix3DActivity.java @ fdddb0b2

1 bc0a685b 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 427ab7bf Leszek Koltunski
20 db5d943e Leszek Koltunski
package org.distorted.examples.matrix3d;
21 427ab7bf Leszek Koltunski
22
import android.app.Activity;
23 4d5b37fe Leszek Koltunski
import android.graphics.Bitmap;
24
import android.graphics.BitmapFactory;
25 427ab7bf Leszek Koltunski
import android.opengl.GLSurfaceView;
26 4d5b37fe Leszek Koltunski
import android.os.Bundle;
27 427ab7bf Leszek Koltunski
import android.view.View;
28 4d5b37fe Leszek Koltunski
import android.widget.AdapterView;
29
import android.widget.ArrayAdapter;
30 427ab7bf Leszek Koltunski
import android.widget.LinearLayout;
31 4d5b37fe Leszek Koltunski
import android.widget.Spinner;
32 427ab7bf Leszek Koltunski
33 4d5b37fe Leszek Koltunski
import org.distorted.examples.R;
34 01782e85 Leszek Koltunski
import org.distorted.library.main.Distorted;
35
import org.distorted.library.main.DistortedEffects;
36
import org.distorted.library.main.MeshCubes;
37
import org.distorted.library.main.MeshObject;
38
import org.distorted.library.main.DistortedTexture;
39 4d5b37fe Leszek Koltunski
40
import java.io.IOException;
41
import java.io.InputStream;
42
import java.util.ArrayList;
43 427ab7bf Leszek Koltunski
44
///////////////////////////////////////////////////////////////////////////////////////////////////
45 4d5b37fe Leszek Koltunski
46
public class Matrix3DActivity extends Activity implements AdapterView.OnItemSelectedListener
47
  {
48 f6d884d5 Leszek Koltunski
  private DistortedTexture mTexture;
49 b01acdaf Leszek Koltunski
  private MeshObject mMesh;
50 d04a4886 Leszek Koltunski
  private DistortedEffects mEffects;
51 4d5b37fe Leszek Koltunski
52 d04a4886 Leszek Koltunski
  private ArrayList<Matrix3DEffect> mList;
53 4d5b37fe Leszek Koltunski
  private int mEffectAdd;
54
55
  private EffectNames[] mEffectNames;
56
57
  private static boolean mSupportsCenter;
58 427ab7bf Leszek Koltunski
59
///////////////////////////////////////////////////////////////////////////////////////////////////
60
61 4d5b37fe Leszek Koltunski
  @Override
62
  protected void onCreate(Bundle savedState)
63
    {
64
    super.onCreate(savedState);
65
66 d04a4886 Leszek Koltunski
    mList = new ArrayList<>();
67 4d5b37fe Leszek Koltunski
68
    createEffectNames();
69
70 d04a4886 Leszek Koltunski
    mEffects = new DistortedEffects();
71 58e9e190 leszek
    mMesh    = new MeshCubes(1,1,1);
72
    mTexture = new DistortedTexture(100,100);
73 4d5b37fe Leszek Koltunski
74
    setEffectView();
75
    }
76
77 427ab7bf Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
78 4d5b37fe Leszek Koltunski
79
  private void createEffectNames()
80
    {
81
    EffectTypes type = EffectTypes.MATRIX;
82
83
    EffectNames[] names = EffectNames.values();
84
85
    int numEffects=0;
86
87
    for(int i=0; i<names.length; i++)
88
      if( names[i].getType() == type ) numEffects++;
89
90
    mEffectNames = new EffectNames[numEffects];
91
92
    numEffects=0;
93
94
    for(int i=0; i<names.length; i++)
95
      if( names[i].getType() == type )
96 427ab7bf Leszek Koltunski
        {
97 4d5b37fe Leszek Koltunski
        mEffectNames[numEffects++] = names[i];
98 427ab7bf Leszek Koltunski
        }
99 4d5b37fe Leszek Koltunski
    }
100 427ab7bf Leszek Koltunski
101
///////////////////////////////////////////////////////////////////////////////////////////////////
102
103 d04a4886 Leszek Koltunski
  public DistortedEffects getEffects()
104 4d5b37fe Leszek Koltunski
    {
105 d04a4886 Leszek Koltunski
    return mEffects;
106 f6d884d5 Leszek Koltunski
    }
107
108
///////////////////////////////////////////////////////////////////////////////////////////////////
109
110
  public DistortedTexture getTexture()
111
    {
112
    return mTexture;
113 4d5b37fe Leszek Koltunski
    }
114
115 e8b6aa95 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
116
117 7fca6741 Leszek Koltunski
  public MeshObject getMesh()
118 e8b6aa95 Leszek Koltunski
    {
119 b01acdaf Leszek Koltunski
    return mMesh;
120 e8b6aa95 Leszek Koltunski
    }
121
122 427ab7bf Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
123
124 4d5b37fe Leszek Koltunski
  public void setRegion(float x, float y, float r)
125
    {
126
127
    }
128 427ab7bf Leszek Koltunski
129
///////////////////////////////////////////////////////////////////////////////////////////////////
130
131 334c13fa Leszek Koltunski
  public void setCenter(float x, float y, float z)
132 4d5b37fe Leszek Koltunski
    {
133 dcd024be Leszek Koltunski
134 4d5b37fe Leszek Koltunski
    }
135
136 427ab7bf Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
137
138 4d5b37fe Leszek Koltunski
  public static void setSupportsRegion(boolean supports)
139
    {
140
141
    }
142 427ab7bf Leszek Koltunski
143
///////////////////////////////////////////////////////////////////////////////////////////////////
144 4d5b37fe Leszek Koltunski
145
  public static void setSupportsCenter(boolean supports)
146
    {
147
    mSupportsCenter = supports;
148
    }
149 427ab7bf Leszek Koltunski
150
///////////////////////////////////////////////////////////////////////////////////////////////////
151
152 4d5b37fe Leszek Koltunski
  public Bitmap getBitmap()
153
    {
154
    Bitmap bmp;
155
156
    InputStream is = getResources().openRawResource(R.raw.grid);
157
158
    try
159
      {
160
      bmp = BitmapFactory.decodeStream(is);
161
      }
162
    finally
163 427ab7bf Leszek Koltunski
      {
164 4d5b37fe Leszek Koltunski
      try
165
        {
166
        is.close();
167
        }
168
      catch(IOException e) { }
169 427ab7bf Leszek Koltunski
      }
170
171 4d5b37fe Leszek Koltunski
    return bmp;
172
    }
173
174 427ab7bf Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
175
176 4d5b37fe Leszek Koltunski
  public int getWidth()
177
    {
178 f6d884d5 Leszek Koltunski
    return mTexture==null ? 0: mTexture.getWidth();
179 4d5b37fe Leszek Koltunski
    }
180 427ab7bf Leszek Koltunski
181
///////////////////////////////////////////////////////////////////////////////////////////////////
182
183 4d5b37fe Leszek Koltunski
  public int getHeight()
184
    {
185 f6d884d5 Leszek Koltunski
    return mTexture==null ? 0: mTexture.getHeight();
186 4d5b37fe Leszek Koltunski
    }
187 427ab7bf Leszek Koltunski
188 334c13fa Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
189
190 f6d884d5 Leszek Koltunski
  public int getDepth()
191 334c13fa Leszek Koltunski
    {
192 b01acdaf Leszek Koltunski
    return mTexture==null ? 0: mTexture.getDepth(mMesh);
193 334c13fa Leszek Koltunski
    }
194
195
///////////////////////////////////////////////////////////////////////////////////////////////////
196
197 f6d884d5 Leszek Koltunski
  public int getScreenWidth()
198 334c13fa Leszek Koltunski
    {
199
    Matrix3DRenderer r = ((Matrix3DSurfaceView)findViewById(R.id.matrix3dSurfaceView)).getRenderer();
200 f6d884d5 Leszek Koltunski
    return r.getWidth();
201 334c13fa Leszek Koltunski
    }
202
203 6f3024ae Leszek Koltunski
//////////////////////////////////////////////////////////////////////////////////
204 427ab7bf Leszek Koltunski
205 4d5b37fe Leszek Koltunski
  public void onItemSelected(AdapterView<?> parent, View view, int pos, long id)
206
    {
207
    switch(parent.getId())
208 427ab7bf Leszek Koltunski
      {
209 40eef4b9 Leszek Koltunski
      case R.id.matrix3dspinner: mEffectAdd = pos;
210
                                 break;
211 427ab7bf Leszek Koltunski
      }
212 4d5b37fe Leszek Koltunski
    }
213
214 427ab7bf Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
215
216 4d5b37fe Leszek Koltunski
  public void onNothingSelected(AdapterView<?> parent)
217
    {
218
    }
219 427ab7bf Leszek Koltunski
220
///////////////////////////////////////////////////////////////////////////////////////////////////
221
222 4d5b37fe Leszek Koltunski
  private void resetData()
223
    {
224
    mSupportsCenter=false;
225
    }
226 427ab7bf Leszek Koltunski
227
///////////////////////////////////////////////////////////////////////////////////////////////////
228
229 4d5b37fe Leszek Koltunski
  private void setEffectView()
230
    {
231
    resetData();
232
233
    final View view = getLayoutInflater().inflate(R.layout.matrix3dlayout, null);
234
235
    setContentView(view);
236
237
    String[] effects = new String[mEffectNames.length];
238
239
    for(int i=0; i<mEffectNames.length; i++) effects[i] = mEffectNames[i].name();
240
241
    Spinner effectSpinner = (Spinner)findViewById(R.id.matrix3dspinner );
242
    effectSpinner.setOnItemSelectedListener(this);
243
244
    ArrayAdapter<String> adapterEffect = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, effects);
245
    adapterEffect.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
246
    effectSpinner.setAdapter(adapterEffect);
247
248
    mEffectAdd = 0;
249
    }
250 427ab7bf Leszek Koltunski
251
///////////////////////////////////////////////////////////////////////////////////////////////////
252 4d5b37fe Leszek Koltunski
253
  public void newEffect(View v)
254
    {
255
    Matrix3DEffect eff = new Matrix3DEffect(mEffectNames[mEffectAdd], this);
256 d04a4886 Leszek Koltunski
    mList.add(eff);
257 4d5b37fe Leszek Koltunski
258
    LinearLayout layout = (LinearLayout)findViewById(R.id.matrix3dlayout);
259
    View view = eff.createView();
260
    layout.addView(view);
261
262
    if( mSupportsCenter )
263 427ab7bf Leszek Koltunski
      {
264 4d5b37fe Leszek Koltunski
      View center = eff.createCenter();
265
      layout.addView(center);
266 427ab7bf Leszek Koltunski
      }
267
268 d04a4886 Leszek Koltunski
    eff.apply(mEffects);
269 4d5b37fe Leszek Koltunski
    }
270
271 427ab7bf Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
272 4d5b37fe Leszek Koltunski
273
  public void removeAll(View v)
274
    {
275 d04a4886 Leszek Koltunski
    mList.clear();
276 4d5b37fe Leszek Koltunski
    LinearLayout layout = (LinearLayout)findViewById(R.id.matrix3dlayout);
277
    layout.removeAllViews();
278 d04a4886 Leszek Koltunski
    mEffects.abortEffects(EffectTypes.MATRIX);
279 4d5b37fe Leszek Koltunski
280
    resetData();
281
    }
282
283 427ab7bf Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
284 4d5b37fe Leszek Koltunski
285
  public void remove(View v)
286
    {
287 d04a4886 Leszek Koltunski
    for(Matrix3DEffect effect: mList)
288 427ab7bf Leszek Koltunski
      {
289 4d5b37fe Leszek Koltunski
      if( effect.thisView(v) )
290 427ab7bf Leszek Koltunski
        {
291 4d5b37fe Leszek Koltunski
        LinearLayout layout = (LinearLayout)findViewById(R.id.matrix3dlayout);
292
        View view;
293
294
        view = effect.getEffect();
295
        if( view!=null ) layout.removeView(view);
296
        view = effect.getCenter();
297
        if( view!=null ) layout.removeView(view);
298
        view = effect.getRegion();
299
        if( view!=null ) layout.removeView(view);
300
301 d04a4886 Leszek Koltunski
        mEffects.abortEffect(effect.getId());
302
        mList.remove(effect);
303 4d5b37fe Leszek Koltunski
304
        resetData();
305
306
        break;
307 427ab7bf Leszek Koltunski
        }
308
      }
309 4d5b37fe Leszek Koltunski
    }
310 427ab7bf Leszek Koltunski
311
///////////////////////////////////////////////////////////////////////////////////////////////////
312 4d5b37fe Leszek Koltunski
// Overrides
313
314
  @Override
315
  protected void onPause()
316
    {
317
    GLSurfaceView mView = (GLSurfaceView)findViewById(R.id.matrix3dSurfaceView);
318
    if( mView!=null ) mView.onPause();
319 b0ebdf5e Leszek Koltunski
320
    Distorted.onPause();
321 4d5b37fe Leszek Koltunski
    super.onPause();
322
    }
323 427ab7bf Leszek Koltunski
324
///////////////////////////////////////////////////////////////////////////////////////////////////
325 4d5b37fe Leszek Koltunski
    
326
  @Override
327
  protected void onResume()
328
    {
329
    super.onResume();
330
    GLSurfaceView mView = (GLSurfaceView)findViewById(R.id.matrix3dSurfaceView);
331
    if( mView!=null ) mView.onResume();
332
    }
333 427ab7bf Leszek Koltunski
334 4d5b37fe Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
335 427ab7bf Leszek Koltunski
    
336 4d5b37fe Leszek Koltunski
  @Override
337
  protected void onDestroy()
338
    {
339
    Distorted.onDestroy();
340
    super.onDestroy();
341
    }
342
343
  }