Project

General

Profile

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

examples / src / main / java / org / distorted / examples / inflate / InflateActivity2.java @ 687263cc

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

    
22
import org.distorted.library.main.DistortedLibrary;
23
import org.distorted.examples.R;
24
import org.distorted.library.main.DistortedTexture;
25
import org.distorted.library.mesh.MeshBase;
26
import org.distorted.library.mesh.MeshCubes;
27
import org.distorted.library.mesh.MeshRectangles;
28
import org.distorted.library.mesh.MeshQuad;
29
import org.distorted.library.mesh.MeshSphere;
30
import org.distorted.library.type.Static4D;
31

    
32
import android.app.Activity;
33
import android.graphics.Bitmap;
34
import android.graphics.BitmapFactory;
35
import android.graphics.Canvas;
36
import android.graphics.Paint;
37
import android.opengl.GLSurfaceView;
38
import android.os.Bundle;
39
import android.view.View;
40
import android.widget.AdapterView;
41
import android.widget.ArrayAdapter;
42
import android.widget.SeekBar;
43
import android.widget.Spinner;
44
import android.widget.TextView;
45

    
46
import java.io.IOException;
47
import java.io.InputStream;
48

    
49
///////////////////////////////////////////////////////////////////////////////////////////////////
50

    
51
public class InflateActivity2 extends Activity implements SeekBar.OnSeekBarChangeListener, AdapterView.OnItemSelectedListener
52
{
53
    private Bitmap mBitmap;
54
    private TextView mTextLevel;
55
    private DistortedTexture mTexture;
56
    private MeshBase mMesh;
57
    private int mNumCols, mNumRows, mNumSlic;
58

    
59
///////////////////////////////////////////////////////////////////////////////////////////////////
60
    
61
    @Override
62
    protected void onPause() 
63
      {
64
      GLSurfaceView mView = this.findViewById(R.id.inflateSurfaceView);
65
      if( mView!=null ) mView.onPause();
66

    
67
      DistortedLibrary.onPause();
68
      super.onPause();
69
      }
70

    
71
///////////////////////////////////////////////////////////////////////////////////////////////////
72
    
73
    @Override
74
    protected void onResume() 
75
      {
76
      super.onResume();
77
      
78
      GLSurfaceView mView = this.findViewById(R.id.inflateSurfaceView);
79
      if( mView!=null ) mView.onResume();  
80
      }
81
    
82
///////////////////////////////////////////////////////////////////////////////////////////////////
83
    
84
    @Override
85
    protected void onDestroy() 
86
      {
87
      DistortedLibrary.onDestroy();
88
      super.onDestroy();
89
      }
90

    
91
///////////////////////////////////////////////////////////////////////////////////////////////////
92

    
93
    @Override
94
    protected void onCreate(Bundle savedState)
95
      {
96
      super.onCreate(savedState);
97

    
98
      Bundle b = getIntent().getExtras();
99

    
100
      String str     = b.getString("string");
101
      int objectType = b.getInt("type");
102
      int bitmapID   = b.getInt("bitmap");
103
      mNumCols       = b.getInt("cols");
104
      mNumRows       = b.getInt("rows");
105
      mNumSlic       = b.getInt("slices");
106

    
107
      int maxsize = mNumCols > mNumRows ? (mNumCols>mNumSlic ? mNumCols:mNumSlic) : (mNumRows>mNumSlic ? mNumRows:mNumSlic) ;
108

    
109
      createBitmap(maxsize,bitmapID);
110

    
111
      switch(objectType)
112
        {
113
        case 0: if( bitmapID!=-1 )
114
                  {
115
                  mMesh = new MeshCubes(mNumCols, str, mNumSlic);
116
                  }
117
                else
118
                  {
119
                  Static4D mapFB = new Static4D(0.0f,0.0f, (float)mNumCols/maxsize, (float)mNumRows/maxsize);
120
                  Static4D mapLR = new Static4D(0.0f,0.0f, (float)mNumSlic/maxsize, (float)mNumRows/maxsize);
121
                  Static4D mapTB = new Static4D(0.0f,0.0f, (float)mNumCols/maxsize, (float)mNumSlic/maxsize);
122

    
123
                  mMesh = new MeshCubes(mNumCols, str, mNumSlic, mapFB, mapFB, mapLR, mapLR, mapTB, mapTB);
124
                  }
125
                break;
126
        case 1: mMesh = new MeshRectangles(mNumCols,mNumRows);
127
                break;
128
        case 2: mMesh = new MeshSphere(mNumRows);
129
                break;
130
        case 3: mMesh = new MeshQuad();
131
                break;
132
        }
133

    
134
      mTexture = new DistortedTexture();
135

    
136
      setContentView(R.layout.inflatelayout);
137

    
138
      Spinner renderSpinner  = findViewById(R.id.inflateSpinnerMode);
139
      renderSpinner.setOnItemSelectedListener(this);
140

    
141
      String[] objectBitmap = new String[] { "Render: Normal", "Render: OIT" };
142

    
143
      ArrayAdapter<String> adapterBitmap = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, objectBitmap);
144
      adapterBitmap.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
145
      renderSpinner.setAdapter(adapterBitmap);
146

    
147
      mTextLevel = findViewById(R.id.inflateInflateText);
148

    
149
      SeekBar transparencyBar = findViewById(R.id.inflateTransparency);
150
      transparencyBar.setOnSeekBarChangeListener(this);
151
      transparencyBar.setProgress(50);
152

    
153
      SeekBar inflateBar = findViewById(R.id.inflateInflateLevel);
154
      inflateBar.setOnSeekBarChangeListener(this);
155
      inflateBar.setProgress(50);
156
      }
157

    
158
///////////////////////////////////////////////////////////////////////////////////////////////////
159

    
160
    private void createBitmap(int size, int bitmapID)
161
      {
162
      if( bitmapID!=-1)
163
        {
164
        InputStream is = getResources().openRawResource(bitmapID);
165

    
166
        try
167
          {
168
          mBitmap = BitmapFactory.decodeStream(is);
169
          }
170
        finally
171
          {
172
          try
173
            {
174
            is.close();
175
            }
176
          catch(IOException e) { }
177
          }
178
        }
179
      else
180
        {
181
        final int T = 64;
182
        final int S = T*size;
183

    
184
        Paint paint = new Paint();
185
        mBitmap = Bitmap.createBitmap(S,S, Bitmap.Config.ARGB_8888);
186
        Canvas canvas = new Canvas(mBitmap);
187

    
188
        paint.setAntiAlias(true);
189
        paint.setTextAlign(Paint.Align.CENTER);
190
        paint.setColor(0xff008800);
191
        paint.setStyle(Paint.Style.FILL);
192
        canvas.drawRect(0, 0, S, S, paint);
193
        paint.setColor(0xffffffff);
194

    
195
        for(int i=0; i<=size ; i++ )
196
          {
197
          canvas.drawRect( T*i-1, 0, T*i+1, S, paint);
198
          canvas.drawRect( 0, T*i-1, S, T*i+1, paint);
199
          }
200
        }
201
      }
202

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

    
205
    public Bitmap getBitmap()
206
      {
207
      return mBitmap;
208
      }
209

    
210
///////////////////////////////////////////////////////////////////////////////////////////////////
211

    
212
    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id)
213
      {
214
      InflateSurfaceView v = this.findViewById(R.id.inflateSurfaceView);
215
      InflateRenderer renderer = v.getRenderer();
216

    
217
      switch(parent.getId())
218
        {
219
        case R.id.inflateSpinnerMode: renderer.setRenderModeToOIT(pos==1);
220
                                      break;
221
        }
222
      }
223

    
224
///////////////////////////////////////////////////////////////////////////////////////////////////
225

    
226
    public void onNothingSelected(AdapterView<?> parent)
227
      {
228
      }
229

    
230
///////////////////////////////////////////////////////////////////////////////////////////////////
231

    
232
    public void onProgressChanged(SeekBar bar, int progress, boolean fromUser)
233
      {
234
      switch (bar.getId())
235
        {
236
        case R.id.inflateTransparency: InflateSurfaceView v1 = this.findViewById(R.id.inflateSurfaceView);
237
                                       v1.getRenderer().setTransparency(progress);
238
                                       break;
239
        case R.id.inflateInflateLevel: InflateSurfaceView v2 = this.findViewById(R.id.inflateSurfaceView);
240
                                       float level = v2.getRenderer().setLevel(progress);
241
                                       mTextLevel.setText(getString(R.string.inflate_placeholder, level));
242
                                       break;
243
        }
244
      }
245

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

    
248
    public void onStartTrackingTouch(SeekBar bar) { }
249

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

    
252
    public void onStopTrackingTouch(SeekBar bar)  { }
253

    
254
///////////////////////////////////////////////////////////////////////////////////////////////////
255

    
256
    public DistortedTexture getTexture()
257
      {
258
      return mTexture;
259
      }
260

    
261
///////////////////////////////////////////////////////////////////////////////////////////////////
262

    
263
    public MeshBase getMesh()
264
      {
265
      return mMesh;
266
      }
267

    
268
///////////////////////////////////////////////////////////////////////////////////////////////////
269

    
270
    public int getNumCols()
271
      {
272
      return mNumCols;
273
      }
274

    
275
///////////////////////////////////////////////////////////////////////////////////////////////////
276

    
277
    public int getNumRows()
278
      {
279
      return mNumRows;
280
      }
281

    
282
///////////////////////////////////////////////////////////////////////////////////////////////////
283

    
284
    public int getNumSlic()
285
      {
286
      return mNumSlic;
287
      }
288
}
(2-2/4)