Project

General

Profile

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

examples / src / main / java / org / distorted / examples / predeform / PredeformActivity2.java @ 9df01f21

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.predeform;
21

    
22
import android.app.Activity;
23
import android.graphics.Bitmap;
24
import android.graphics.BitmapFactory;
25
import android.graphics.Canvas;
26
import android.graphics.Paint;
27
import android.opengl.GLSurfaceView;
28
import android.os.Bundle;
29
import android.view.View;
30
import android.widget.AdapterView;
31
import android.widget.ArrayAdapter;
32
import android.widget.SeekBar;
33
import android.widget.Spinner;
34
import android.widget.TextView;
35

    
36
import org.distorted.examples.R;
37
import org.distorted.library.main.DistortedLibrary;
38
import org.distorted.library.main.DistortedTexture;
39
import org.distorted.library.mesh.MeshBase;
40

    
41
import java.io.IOException;
42
import java.io.InputStream;
43

    
44
///////////////////////////////////////////////////////////////////////////////////////////////////
45

    
46
public class PredeformActivity2 extends Activity implements SeekBar.OnSeekBarChangeListener, AdapterView.OnItemSelectedListener
47
{
48
    private Bitmap mBitmap;
49
    private TextView mTextLevel;
50
    private DistortedTexture mTexture;
51
    private MeshBase mMesh;
52
    private int mNumRows, mNumCols, mNumSlic;
53

    
54
///////////////////////////////////////////////////////////////////////////////////////////////////
55
    
56
    @Override
57
    protected void onPause() 
58
      {
59
      GLSurfaceView mView = findViewById(R.id.predeformSurfaceView);
60
      if( mView!=null ) mView.onPause();
61

    
62
      DistortedLibrary.onPause();
63
      super.onPause();
64
      }
65

    
66
///////////////////////////////////////////////////////////////////////////////////////////////////
67
    
68
    @Override
69
    protected void onResume() 
70
      {
71
      super.onResume();
72
      
73
      GLSurfaceView mView = findViewById(R.id.predeformSurfaceView);
74
      if( mView!=null ) mView.onResume();  
75
      }
76
    
77
///////////////////////////////////////////////////////////////////////////////////////////////////
78
    
79
    @Override
80
    protected void onDestroy() 
81
      {
82
      DistortedLibrary.onDestroy();
83
      super.onDestroy();
84
      }
85

    
86
///////////////////////////////////////////////////////////////////////////////////////////////////
87

    
88
    @Override
89
    protected void onCreate(Bundle savedState)
90
      {
91
      super.onCreate(savedState);
92

    
93
      Bundle b = getIntent().getExtras();
94

    
95
      int objectType = b.getInt("type");
96
      int bitmapID   = b.getInt("bitmap");
97
      mNumCols       = b.getInt("cols");
98
      mNumRows       = b.getInt("rows");
99
      mNumSlic       = b.getInt("slices");
100

    
101
      StringBuilder strBuilder = new StringBuilder();
102
      for(int i=0; i<mNumCols*mNumRows; i++) strBuilder.append('1');
103

    
104
      int maxsize = mNumCols > mNumRows ? (Math.max(mNumCols, mNumSlic)) : (Math.max(mNumRows, mNumSlic));
105
      createBitmap(maxsize,bitmapID);
106
      mMesh =  PredeformMeshList.createMesh(objectType, mNumCols, mNumRows, mNumSlic, bitmapID, strBuilder.toString() );
107

    
108
      mTexture = new DistortedTexture();
109

    
110
      setContentView(R.layout.predeformlayout);
111

    
112
      Spinner renderSpinner = findViewById(R.id.predeformSpinnerMode);
113
      renderSpinner.setOnItemSelectedListener(this);
114

    
115
      String[] objectBitmap = new String[] { "Render: Normal", "Render: OIT" };
116

    
117
      ArrayAdapter<String> adapterBitmap = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, objectBitmap);
118
      adapterBitmap.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
119
      renderSpinner.setAdapter(adapterBitmap);
120

    
121
      mTextLevel = findViewById(R.id.predeformInflateText);
122

    
123
      SeekBar transparencyBar = findViewById(R.id.predeformTransparency);
124
      transparencyBar.setOnSeekBarChangeListener(this);
125
      transparencyBar.setProgress(50);
126

    
127
      SeekBar inflateBar = findViewById(R.id.predeformInflateLevel);
128
      inflateBar.setOnSeekBarChangeListener(this);
129
      inflateBar.setProgress(50);
130
      }
131

    
132
///////////////////////////////////////////////////////////////////////////////////////////////////
133

    
134
    private void createBitmap(int size, int bitmapID)
135
      {
136
      if( bitmapID!=-1)
137
        {
138
        try (InputStream is = getResources().openRawResource(bitmapID))
139
          {
140
          mBitmap = BitmapFactory.decodeStream(is);
141
          }
142
        catch( IOException ex ) { android.util.Log.e("act", "failed to open resource "+bitmapID); }
143
        }
144
      else
145
        {
146
        final int T = 64;
147
        final int S = T*size;
148

    
149
        Paint paint = new Paint();
150
        mBitmap = Bitmap.createBitmap(S,S, Bitmap.Config.ARGB_8888);
151
        Canvas canvas = new Canvas(mBitmap);
152

    
153
        paint.setAntiAlias(true);
154
        paint.setTextAlign(Paint.Align.CENTER);
155
        paint.setColor(0xff008800);
156
        paint.setStyle(Paint.Style.FILL);
157
        canvas.drawRect(0, 0, S, S, paint);
158
        paint.setColor(0xffffffff);
159

    
160
        for(int i=0; i<=size ; i++ )
161
          {
162
          canvas.drawRect( T*i-1, 0, T*i+1, S, paint);
163
          canvas.drawRect( 0, T*i-1, S, T*i+1, paint);
164
          }
165
        }
166
      }
167

    
168
///////////////////////////////////////////////////////////////////////////////////////////////////
169

    
170
    int getRows()
171
      {
172
      return mNumRows;
173
      }
174

    
175
///////////////////////////////////////////////////////////////////////////////////////////////////
176

    
177
    int getCols()
178
      {
179
      return mNumCols;
180
      }
181

    
182
///////////////////////////////////////////////////////////////////////////////////////////////////
183

    
184
    int getSlic()
185
      {
186
      return mNumSlic;
187
      }
188

    
189
///////////////////////////////////////////////////////////////////////////////////////////////////
190

    
191
    public Bitmap getBitmap()
192
      {
193
      return mBitmap;
194
      }
195

    
196
///////////////////////////////////////////////////////////////////////////////////////////////////
197

    
198
    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id)
199
      {
200
      PredeformSurfaceView v = findViewById(R.id.predeformSurfaceView);
201
      PredeformRenderer renderer = v.getRenderer();
202

    
203
      if( parent.getId()==R.id.predeformSpinnerMode)
204
        {
205
        renderer.setRenderModeToOIT(pos==1);
206
        }
207
      }
208

    
209
///////////////////////////////////////////////////////////////////////////////////////////////////
210

    
211
    public void onNothingSelected(AdapterView<?> parent)
212
      {
213
      }
214

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

    
217
    public void onProgressChanged(SeekBar bar, int progress, boolean fromUser)
218
      {
219
      switch (bar.getId())
220
        {
221
        case R.id.predeformTransparency: PredeformSurfaceView v1 = findViewById(R.id.predeformSurfaceView);
222
                                         v1.getRenderer().setTransparency(progress);
223
                                         break;
224
        case R.id.predeformInflateLevel: PredeformSurfaceView v2 = findViewById(R.id.predeformSurfaceView);
225
                                         float level = v2.getRenderer().setLevel(progress);
226
                                         mTextLevel.setText(getString(R.string.inflate_placeholder, level));
227
                                         break;
228
        }
229
      }
230

    
231
///////////////////////////////////////////////////////////////////////////////////////////////////
232

    
233
    public void onStartTrackingTouch(SeekBar bar) { }
234

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

    
237
    public void onStopTrackingTouch(SeekBar bar)  { }
238

    
239
///////////////////////////////////////////////////////////////////////////////////////////////////
240

    
241
    public DistortedTexture getTexture()
242
      {
243
      return mTexture;
244
      }
245

    
246
///////////////////////////////////////////////////////////////////////////////////////////////////
247

    
248
    public MeshBase getMesh()
249
      {
250
      return mMesh;
251
      }
252
}
(2-2/7)