Project

General

Profile

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

examples / src / main / java / org / distorted / examples / triblur / TriblurActivity.java @ c40df162

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.CheckBox;
29
import android.widget.SeekBar;
30
import android.widget.Spinner;
31

    
32
import org.distorted.examples.R;
33
import org.distorted.library.effect.EffectQuality;
34
import org.distorted.library.main.Distorted;
35

    
36
///////////////////////////////////////////////////////////////////////////////////////////////////
37

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

    
50
    private int mQuality;
51
    private int mBackground;
52

    
53
///////////////////////////////////////////////////////////////////////////////////////////////////
54

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

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

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

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

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

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

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

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

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

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

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

    
101
///////////////////////////////////////////////////////////////////////////////////////////////////
102

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

    
116
///////////////////////////////////////////////////////////////////////////////////////////////////
117

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

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

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

    
152
///////////////////////////////////////////////////////////////////////////////////////////////////
153

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

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

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

    
167
///////////////////////////////////////////////////////////////////////////////////////////////////
168

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

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

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

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

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

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

    
194
///////////////////////////////////////////////////////////////////////////////////////////////////
195

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

    
212
///////////////////////////////////////////////////////////////////////////////////////////////////
213

    
214
    public void onStartTrackingTouch(SeekBar bar) { }
215

    
216
///////////////////////////////////////////////////////////////////////////////////////////////////
217

    
218
    public void onStopTrackingTouch(SeekBar bar)  { }
219

    
220
///////////////////////////////////////////////////////////////////////////////////////////////////
221

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

    
238
///////////////////////////////////////////////////////////////////////////////////////////////////
239

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

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

    
259
///////////////////////////////////////////////////////////////////////////////////////////////////
260

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

    
271
///////////////////////////////////////////////////////////////////////////////////////////////////
272

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

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

    
286
///////////////////////////////////////////////////////////////////////////////////////////////////
287

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

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