Project

General

Profile

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

examples / src / main / java / org / distorted / examples / triblur / TriblurActivity.java @ 8392dc7b

1
///////////////////////////////////////////////////////////////////////////////////////////////////
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
package org.distorted.examples.triblur;
21

    
22
import android.app.Activity;
23
import android.opengl.GLSurfaceView;
24
import android.os.Bundle;
25
import android.view.View;
26
import android.widget.AdapterView;
27
import android.widget.ArrayAdapter;
28
import android.widget.SeekBar;
29
import android.widget.Spinner;
30

    
31
import org.distorted.examples.R;
32
import org.distorted.library.effect.EffectQuality;
33
import org.distorted.library.main.DistortedLibrary;
34

    
35
///////////////////////////////////////////////////////////////////////////////////////////////////
36

    
37
public class TriblurActivity extends Activity implements SeekBar.OnSeekBarChangeListener, AdapterView.OnItemSelectedListener
38
{
39
    private static final int NONE0 = 0;
40
    private static final int NONE1 = 1;
41
    private static final int NONE2 = 2;
42
    private static final int BLUR0 = 3;
43
    private static final int BLUR1 = 4;
44
    private static final int BLUR2 = 5;
45
    private static final int GLOW0 = 6;
46
    private static final int GLOW1 = 7;
47
    private static final int GLOW2 = 8;
48

    
49
    private int mQuality;
50
    private int mBackground;
51

    
52
///////////////////////////////////////////////////////////////////////////////////////////////////
53

    
54
    @Override
55
    protected void onCreate(Bundle savedState) 
56
      {
57
      super.onCreate(savedState);
58
      setContentView(R.layout.triblurlayout);
59

    
60
      SeekBar radiusBar0 = findViewById(R.id.triblurSeek0);
61
      SeekBar radiusBar1 = findViewById(R.id.triblurSeek1);
62
      SeekBar radiusBar2 = findViewById(R.id.triblurSeek2);
63

    
64
      radiusBar0.setOnSeekBarChangeListener(this);
65
      radiusBar1.setOnSeekBarChangeListener(this);
66
      radiusBar2.setOnSeekBarChangeListener(this);
67

    
68
      if( savedState==null )
69
        {
70
        radiusBar0.setProgress(20);
71
        radiusBar1.setProgress(50);
72
        radiusBar2.setProgress(70);
73

    
74
        privateQuality(1);
75
        privateBackgroundColor(1);
76
        privateEffect(BLUR0);
77
        privateEffect(BLUR1);
78
        privateEffect(BLUR2);
79
        }
80

    
81
      Spinner typeSpinner  = findViewById(R.id.triblur_spinnerQuality);
82
      typeSpinner.setOnItemSelectedListener(this);
83

    
84
      String[] objectType = new String[] {"Quality Highest", "Quality High", "Quality Medium", "Quality Low"};
85

    
86
      ArrayAdapter<String> adapterType = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, objectType);
87
      adapterType.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
88
      typeSpinner.setAdapter(adapterType);
89

    
90
      Spinner bitmapSpinner  = findViewById(R.id.triblur_spinnerMode);
91
      bitmapSpinner.setOnItemSelectedListener(this);
92

    
93
      String[] objectBitmap = new String[] { "Render: Normal", "Render: OIT" };
94

    
95
      ArrayAdapter<String> adapterBitmap = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, objectBitmap);
96
      adapterBitmap.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
97
      bitmapSpinner.setAdapter(adapterBitmap);
98
      }
99

    
100
///////////////////////////////////////////////////////////////////////////////////////////////////
101

    
102
    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id)
103
      {
104
      switch(parent.getId())
105
        {
106
        case R.id.triblur_spinnerQuality: privateQuality(pos);
107
                                          break;
108
        case R.id.triblur_spinnerMode   : TriblurSurfaceView v = findViewById(R.id.triblurSurfaceView);
109
                                          TriblurRenderer renderer = v.getRenderer();
110
                                          renderer.setRenderModeToOIT(pos==1);
111
                                          break;
112
        }
113
      }
114

    
115
///////////////////////////////////////////////////////////////////////////////////////////////////
116

    
117
    public void onNothingSelected(AdapterView<?> parent)
118
      {
119
      }
120

    
121
///////////////////////////////////////////////////////////////////////////////////////////////////
122
    
123
    @Override
124
    protected void onPause() 
125
      {
126
      GLSurfaceView view = findViewById(R.id.triblurSurfaceView);
127
      view.onPause();
128
      DistortedLibrary.onPause();
129
      super.onPause();
130
      }
131

    
132
///////////////////////////////////////////////////////////////////////////////////////////////////
133
    
134
    @Override
135
    protected void onResume() 
136
      {
137
      super.onResume();
138
      GLSurfaceView view = findViewById(R.id.triblurSurfaceView);
139
      view.onResume();
140
      }
141
    
142
///////////////////////////////////////////////////////////////////////////////////////////////////
143
    
144
    @Override
145
    protected void onDestroy() 
146
      {
147
      DistortedLibrary.onDestroy();
148
      super.onDestroy();
149
      }
150

    
151
///////////////////////////////////////////////////////////////////////////////////////////////////
152

    
153
    @Override
154
    public void onSaveInstanceState(Bundle savedInstanceState)
155
      {
156
      super.onSaveInstanceState(savedInstanceState);
157

    
158
      TriblurSurfaceView view = findViewById(R.id.triblurSurfaceView);
159
      TriblurRenderer renderer = view.getRenderer();
160

    
161
      savedInstanceState.putIntArray("effects", renderer.getEffects() );
162
      savedInstanceState.putInt("quality", mQuality);
163
      savedInstanceState.putInt("background", mBackground);
164
      }
165

    
166
///////////////////////////////////////////////////////////////////////////////////////////////////
167

    
168
    @Override
169
    public void onRestoreInstanceState(Bundle savedInstanceState)
170
      {
171
      super.onRestoreInstanceState(savedInstanceState);
172

    
173
      int[] effects = savedInstanceState.getIntArray("effects");
174

    
175
      TriblurSurfaceView view = findViewById(R.id.triblurSurfaceView);
176
      TriblurRenderer renderer = view.getRenderer();
177

    
178
      if( effects!=null )
179
        {
180
        for(int i=0; i<effects.length; i++)
181
          {
182
          renderer.setEffects(i,effects[i]);
183
          }
184
        }
185

    
186
      mQuality    = savedInstanceState.getInt("quality");
187
      mBackground = savedInstanceState.getInt("background");
188

    
189
      privateQuality(mQuality);
190
      privateBackgroundColor(mBackground);
191
      }
192

    
193
///////////////////////////////////////////////////////////////////////////////////////////////////
194

    
195
    public void onProgressChanged(SeekBar bar, int progress, boolean fromUser)
196
      {
197
      switch (bar.getId())
198
        {
199
        case R.id.triblurSeek0: TriblurSurfaceView view0 = findViewById(R.id.triblurSurfaceView);
200
                                view0.getRenderer().setRange(0,progress);
201
                                break;
202
        case R.id.triblurSeek1: TriblurSurfaceView view1 = findViewById(R.id.triblurSurfaceView);
203
                                view1.getRenderer().setRange(1,progress);
204
                                break;
205
        case R.id.triblurSeek2: TriblurSurfaceView view2 = findViewById(R.id.triblurSurfaceView);
206
                                view2.getRenderer().setRange(2,progress);
207
                                break;
208
        }
209
      }
210

    
211
///////////////////////////////////////////////////////////////////////////////////////////////////
212

    
213
    public void onStartTrackingTouch(SeekBar bar) { }
214

    
215
///////////////////////////////////////////////////////////////////////////////////////////////////
216

    
217
    public void onStopTrackingTouch(SeekBar bar)  { }
218

    
219
///////////////////////////////////////////////////////////////////////////////////////////////////
220

    
221
  public void effect(View v)
222
    {
223
    switch(v.getId())
224
      {
225
      case R.id.triblurRadioNone0: privateEffect(NONE0); break;
226
      case R.id.triblurRadioNone1: privateEffect(NONE1); break;
227
      case R.id.triblurRadioNone2: privateEffect(NONE2); break;
228
      case R.id.triblurRadioBlur0: privateEffect(BLUR0); break;
229
      case R.id.triblurRadioBlur1: privateEffect(BLUR1); break;
230
      case R.id.triblurRadioBlur2: privateEffect(BLUR2); break;
231
      case R.id.triblurRadioGlow0: privateEffect(GLOW0); break;
232
      case R.id.triblurRadioGlow1: privateEffect(GLOW1); break;
233
      case R.id.triblurRadioGlow2: privateEffect(GLOW2); break;
234
      }
235
    }
236

    
237
///////////////////////////////////////////////////////////////////////////////////////////////////
238

    
239
  private void privateEffect(int index)
240
    {
241
    TriblurSurfaceView view = findViewById(R.id.triblurSurfaceView);
242
    TriblurRenderer renderer = view.getRenderer();
243

    
244
    switch(index)
245
      {
246
      case NONE0: renderer.setEffects(0,0); break;
247
      case NONE1: renderer.setEffects(1,0); break;
248
      case NONE2: renderer.setEffects(2,0); break;
249
      case BLUR0: renderer.setEffects(0,1); break;
250
      case BLUR1: renderer.setEffects(1,1); break;
251
      case BLUR2: renderer.setEffects(2,1); break;
252
      case GLOW0: renderer.setEffects(0,2); break;
253
      case GLOW1: renderer.setEffects(1,2); break;
254
      case GLOW2: renderer.setEffects(2,2); break;
255
      }
256
    }
257

    
258
///////////////////////////////////////////////////////////////////////////////////////////////////
259

    
260
  public void backgroundColor(View v)
261
    {
262
    switch(v.getId())
263
      {
264
      case R.id.triblurRadioBackground0: privateBackgroundColor(0); break;
265
      case R.id.triblurRadioBackground1: privateBackgroundColor(1); break;
266
      case R.id.triblurRadioBackground2: privateBackgroundColor(2); break;
267
      }
268
    }
269

    
270
///////////////////////////////////////////////////////////////////////////////////////////////////
271

    
272
  private void privateBackgroundColor(int index)
273
    {
274
    TriblurSurfaceView view = findViewById(R.id.triblurSurfaceView);
275
    TriblurRenderer renderer = view.getRenderer();
276

    
277
    switch(index)
278
      {
279
      case 0: renderer.setBackground(0.0f,0.0f,0.0f,1.0f); mBackground=0; break;
280
      case 1: renderer.setBackground(1.0f,1.0f,1.0f,1.0f); mBackground=1; break;
281
      case 2: renderer.setBackground(0.0f,0.0f,1.0f,1.0f); mBackground=2; break;
282
      }
283
    }
284

    
285
///////////////////////////////////////////////////////////////////////////////////////////////////
286

    
287
  private void privateQuality(int index)
288
    {
289
    TriblurSurfaceView view = findViewById(R.id.triblurSurfaceView);
290
    TriblurRenderer renderer = view.getRenderer();
291

    
292
    switch(index)
293
      {
294
      case 0: renderer.setQuality(EffectQuality.HIGHEST);
295
              mQuality = EffectQuality.HIGHEST.ordinal();
296
              break;
297
      case 1: renderer.setQuality(EffectQuality.HIGH);
298
              mQuality = EffectQuality.HIGH.ordinal();
299
              break;
300
      case 2: renderer.setQuality(EffectQuality.MEDIUM);
301
              mQuality = EffectQuality.MEDIUM.ordinal();
302
              break;
303
      case 3: renderer.setQuality(EffectQuality.LOW);
304
              mQuality = EffectQuality.LOW.ordinal();
305
              break;
306
    }
307
  }
308
}
(1-1/3)