Project

General

Profile

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

examples / src / main / java / org / distorted / examples / triblur / TriblurActivity.java @ 107e4b72

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 int mQuality;
41
    private int mBackground;
42

    
43
///////////////////////////////////////////////////////////////////////////////////////////////////
44

    
45
    @Override
46
    protected void onCreate(Bundle savedState) 
47
      {
48
      super.onCreate(savedState);
49
      setContentView(R.layout.triblurlayout);
50

    
51
      SeekBar radiusBar0 = findViewById(R.id.triblurSeek0);
52
      SeekBar radiusBar1 = findViewById(R.id.triblurSeek1);
53
      SeekBar radiusBar2 = findViewById(R.id.triblurSeek2);
54

    
55
      radiusBar0.setOnSeekBarChangeListener(this);
56
      radiusBar1.setOnSeekBarChangeListener(this);
57
      radiusBar2.setOnSeekBarChangeListener(this);
58

    
59
      if( savedState==null )
60
        {
61
        radiusBar0.setProgress(20);
62
        radiusBar1.setProgress(50);
63
        radiusBar2.setProgress(70);
64

    
65
        privateQuality(1);
66
        privateBackgroundColor(1);
67
        }
68

    
69
      Spinner typeSpinner  = findViewById(R.id.triblur_spinnerQuality);
70
      typeSpinner.setOnItemSelectedListener(this);
71

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

    
74
      ArrayAdapter<String> adapterType = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, objectType);
75
      adapterType.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
76
      typeSpinner.setAdapter(adapterType);
77

    
78
      Spinner bitmapSpinner  = findViewById(R.id.triblur_spinnerMode);
79
      bitmapSpinner.setOnItemSelectedListener(this);
80

    
81
      String[] objectBitmap = new String[] { "Render: Normal", "Render: OIT" };
82

    
83
      ArrayAdapter<String> adapterBitmap = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, objectBitmap);
84
      adapterBitmap.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
85
      bitmapSpinner.setAdapter(adapterBitmap);
86
      }
87

    
88
///////////////////////////////////////////////////////////////////////////////////////////////////
89

    
90
    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id)
91
      {
92
      switch(parent.getId())
93
        {
94
        case R.id.triblur_spinnerQuality: privateQuality(pos);
95
                                          break;
96
        case R.id.triblur_spinnerMode   : TriblurSurfaceView v = this.findViewById(R.id.triblurSurfaceView);
97
                                          TriblurRenderer renderer = v.getRenderer();
98
                                          renderer.setRenderModeToOIT(pos==1);
99
                                          break;
100
        }
101
      }
102

    
103
///////////////////////////////////////////////////////////////////////////////////////////////////
104

    
105
    public void onNothingSelected(AdapterView<?> parent)
106
      {
107
      }
108

    
109
///////////////////////////////////////////////////////////////////////////////////////////////////
110
    
111
    @Override
112
    protected void onPause() 
113
      {
114
      GLSurfaceView view = this.findViewById(R.id.triblurSurfaceView);
115
      view.onPause();
116
      Distorted.onPause();
117
      super.onPause();
118
      }
119

    
120
///////////////////////////////////////////////////////////////////////////////////////////////////
121
    
122
    @Override
123
    protected void onResume() 
124
      {
125
      super.onResume();
126
      GLSurfaceView view = this.findViewById(R.id.triblurSurfaceView);
127
      view.onResume();
128
      }
129
    
130
///////////////////////////////////////////////////////////////////////////////////////////////////
131
    
132
    @Override
133
    protected void onDestroy() 
134
      {
135
      Distorted.onDestroy();  
136
      super.onDestroy();
137
      }
138

    
139
///////////////////////////////////////////////////////////////////////////////////////////////////
140

    
141
    @Override
142
    public void onSaveInstanceState(Bundle savedInstanceState)
143
      {
144
      super.onSaveInstanceState(savedInstanceState);
145

    
146
      TriblurSurfaceView view = this.findViewById(R.id.triblurSurfaceView);
147
      TriblurRenderer renderer = view.getRenderer();
148

    
149
      savedInstanceState.putBooleanArray("checkboxes", renderer.getChecked() );
150
      savedInstanceState.putInt("quality", mQuality);
151
      savedInstanceState.putInt("background", mBackground);
152
      }
153

    
154
///////////////////////////////////////////////////////////////////////////////////////////////////
155

    
156
    @Override
157
    public void onRestoreInstanceState(Bundle savedInstanceState)
158
      {
159
      super.onRestoreInstanceState(savedInstanceState);
160

    
161
      boolean[] checkboxes = savedInstanceState.getBooleanArray("checkboxes");
162

    
163
      TriblurSurfaceView view = this.findViewById(R.id.triblurSurfaceView);
164
      TriblurRenderer renderer = view.getRenderer();
165

    
166
      if( checkboxes!=null )
167
        {
168
        for(int i=0; i<checkboxes.length; i++)
169
          {
170
          renderer.setChecked(i,checkboxes[i]);
171
          }
172
        }
173

    
174
      mQuality    = savedInstanceState.getInt("quality");
175
      mBackground = savedInstanceState.getInt("background");
176

    
177
      privateQuality(mQuality);
178
      privateBackgroundColor(mBackground);
179
      }
180

    
181
///////////////////////////////////////////////////////////////////////////////////////////////////
182

    
183
    public void onProgressChanged(SeekBar bar, int progress, boolean fromUser)
184
      {
185
      switch (bar.getId())
186
        {
187
        case R.id.triblurSeek0: TriblurSurfaceView view0 = this.findViewById(R.id.triblurSurfaceView);
188
                                view0.getRenderer().setRange(0,progress);
189
                                break;
190
        case R.id.triblurSeek1: TriblurSurfaceView view1 = this.findViewById(R.id.triblurSurfaceView);
191
                                view1.getRenderer().setRange(1,progress);
192
                                break;
193
        case R.id.triblurSeek2: TriblurSurfaceView view2 = this.findViewById(R.id.triblurSurfaceView);
194
                                view2.getRenderer().setRange(2,progress);
195
                                break;
196
        }
197
      }
198

    
199
///////////////////////////////////////////////////////////////////////////////////////////////////
200

    
201
    public void onStartTrackingTouch(SeekBar bar) { }
202

    
203
///////////////////////////////////////////////////////////////////////////////////////////////////
204

    
205
    public void onStopTrackingTouch(SeekBar bar)  { }
206

    
207
///////////////////////////////////////////////////////////////////////////////////////////////////
208

    
209
  public void onClick(View view)
210
    {
211
    CheckBox box = (CheckBox)view;
212
    boolean checked = box.isChecked();
213
    TriblurSurfaceView sView = this.findViewById(R.id.triblurSurfaceView);
214

    
215
    switch(box.getId())
216
      {
217
      case R.id.triblurCheckBox0  : sView.getRenderer().setChecked(0,checked); break;
218
      case R.id.triblurCheckBox1  : sView.getRenderer().setChecked(1,checked); break;
219
      case R.id.triblurCheckBox2  : sView.getRenderer().setChecked(2,checked); break;
220
      }
221
    }
222

    
223
///////////////////////////////////////////////////////////////////////////////////////////////////
224

    
225
  public void backgroundColor(View v)
226
    {
227
    switch(v.getId())
228
      {
229
      case R.id.triblurRadioBackground0: privateBackgroundColor(0); break;
230
      case R.id.triblurRadioBackground1: privateBackgroundColor(1); break;
231
      case R.id.triblurRadioBackground2: privateBackgroundColor(2); break;
232
      }
233
    }
234

    
235
///////////////////////////////////////////////////////////////////////////////////////////////////
236

    
237
  private void privateBackgroundColor(int index)
238
    {
239
    TriblurSurfaceView view = this.findViewById(R.id.triblurSurfaceView);
240
    TriblurRenderer renderer = view.getRenderer();
241

    
242
    switch(index)
243
      {
244
      case 0: renderer.setBackground(0.0f,0.0f,0.0f,1.0f); mBackground=0; break;
245
      case 1: renderer.setBackground(1.0f,1.0f,1.0f,1.0f); mBackground=1; break;
246
      case 2: renderer.setBackground(0.0f,0.0f,1.0f,1.0f); mBackground=2; break;
247
      }
248
    }
249

    
250
///////////////////////////////////////////////////////////////////////////////////////////////////
251

    
252
  private void privateQuality(int index)
253
    {
254
    TriblurSurfaceView view = this.findViewById(R.id.triblurSurfaceView);
255
    TriblurRenderer renderer = view.getRenderer();
256

    
257
    switch(index)
258
      {
259
      case 0: renderer.setQuality(EffectQuality.HIGHEST);
260
              mQuality = EffectQuality.HIGHEST.ordinal();
261
              break;
262
      case 1: renderer.setQuality(EffectQuality.HIGH);
263
              mQuality = EffectQuality.HIGH.ordinal();
264
              break;
265
      case 2: renderer.setQuality(EffectQuality.MEDIUM);
266
              mQuality = EffectQuality.MEDIUM.ordinal();
267
              break;
268
      case 3: renderer.setQuality(EffectQuality.LOW);
269
              mQuality = EffectQuality.LOW.ordinal();
270
              break;
271
    }
272
  }
273
}
(1-1/3)