Project

General

Profile

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

examples / src / main / java / org / distorted / examples / listener / ListenerRenderer.java @ 7bf107f7

1 bc0a685b Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
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 427ab7bf Leszek Koltunski
20 5068fa06 Leszek Koltunski
package org.distorted.examples.listener;
21 427ab7bf Leszek Koltunski
22
import java.io.IOException;
23
import java.io.InputStream;
24
import java.util.Random;
25
26
import javax.microedition.khronos.egl.EGLConfig;
27
import javax.microedition.khronos.opengles.GL10;
28
29 5068fa06 Leszek Koltunski
import org.distorted.examples.R;
30 427ab7bf Leszek Koltunski
31 5068fa06 Leszek Koltunski
import org.distorted.library.Distorted;
32
import org.distorted.library.DistortedBitmap;
33 95593730 Leszek Koltunski
import org.distorted.library.EffectTypes;
34 7bf107f7 Leszek Koltunski
import org.distorted.library.type.Dynamic3D;
35 7589635e Leszek Koltunski
import org.distorted.library.type.Static2D;
36
import org.distorted.library.type.Static3D;
37
import org.distorted.library.type.Static4D;
38 13efa930 Leszek Koltunski
import org.distorted.library.message.EffectListener;
39
import org.distorted.library.message.EffectMessage;
40 427ab7bf Leszek Koltunski
41
import android.graphics.Bitmap;
42
import android.graphics.BitmapFactory;
43
import android.opengl.GLES20;
44
import android.opengl.GLSurfaceView;
45
46
///////////////////////////////////////////////////////////////////////////////////////////////////
47
48
class ListenerRenderer implements GLSurfaceView.Renderer,EffectListener 
49
{
50
   private GLSurfaceView mView;
51
   private DistortedBitmap water;
52
   private int bmpHeight, bmpWidth;
53
   private Random mRnd;
54
    
55
   private final int NUM_BUBBLES = 12;
56
    
57
///////////////////////////////////////////////////////////////////////////////////////////////////
58
59
   public ListenerRenderer(GLSurfaceView v) 
60
      {
61
      Distorted.setMaxVertex(NUM_BUBBLES);   
62
      mView = v;
63
      }
64
65
///////////////////////////////////////////////////////////////////////////////////////////////////
66
67
   private long randomizeNewBubble()
68
      {
69 a8c3ada7 Leszek Koltunski
      int radius   = (int)(( 0.10f + 0.70f*mRnd.nextFloat())*bmpWidth);           // pop up a bubble of size (radius,height)
70 427ab7bf Leszek Koltunski
      int height   = (int)((-0.10f + 0.20f*mRnd.nextFloat())*bmpWidth);           // 
71 a8c3ada7 Leszek Koltunski
      int pointx   = mRnd.nextInt( (int)(0.8f*bmpWidth ))+ (int)(0.1f*bmpWidth ); // at a random place on the bitmap (but not near the edge)
72 427ab7bf Leszek Koltunski
      int pointy   = mRnd.nextInt( (int)(0.8f*bmpHeight))+ (int)(0.1f*bmpHeight); // 
73
      int duration = 1000 + mRnd.nextInt(3000);                                   // for anytime from 3 to 4 seconds 
74 7bf107f7 Leszek Koltunski
75
      Dynamic3D dDistort = new Dynamic3D();
76
      dDistort.setCount(1);
77
      dDistort.setDuration(duration);
78
      dDistort.add(new Static3D(0,0,     0));
79
      dDistort.add(new Static3D(0,0,height));
80
81
      return water.distort(dDistort, new Static2D(pointx,pointy), new Static4D(0,0,radius,radius));
82 427ab7bf Leszek Koltunski
      }
83
   
84
///////////////////////////////////////////////////////////////////////////////////////////////////
85 b9615af9 Leszek Koltunski
// the library sending messages to us
86 427ab7bf Leszek Koltunski
87 b9615af9 Leszek Koltunski
   public void effectMessage(final EffectMessage em, final long effectID, final int effectName, final long bitmapID, final String message)
88 427ab7bf Leszek Koltunski
     {
89
     switch(em)
90
        {
91
        case EFFECT_REMOVED: randomizeNewBubble();
92
        default            : break;
93
        }
94
     }
95
   
96
///////////////////////////////////////////////////////////////////////////////////////////////////
97
98
    public void onDrawFrame(GL10 glUnused) 
99
      {
100
      GLES20.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
101
      GLES20.glClear( GLES20.GL_DEPTH_BUFFER_BIT | GLES20.GL_COLOR_BUFFER_BIT);
102
      
103
      water.draw(System.currentTimeMillis());
104
      }
105
106
///////////////////////////////////////////////////////////////////////////////////////////////////
107
    
108
    public void onSurfaceChanged(GL10 glUnused, int width, int height) 
109
      { 
110 a8c3ada7 Leszek Koltunski
      water.abortEffects(EffectTypes.MATRIX);
111 427ab7bf Leszek Koltunski
         
112
      if( bmpHeight/bmpWidth > height/width )
113
        {
114
        int w = (height*bmpWidth)/bmpHeight;
115 7589635e Leszek Koltunski
        float factor = (float)height/bmpHeight;
116
117
        water.move( new Static3D((width-w)/2,0,0) );
118
        water.scale( new Static3D(factor,factor,factor) );
119 427ab7bf Leszek Koltunski
        }
120
      else
121
        {
122
        int h = (width*bmpHeight)/bmpWidth;
123 7589635e Leszek Koltunski
        float factor = (float)width/bmpWidth;
124
125
        water.move( new Static3D(0,(height-h)/2,0) );
126
        water.scale( new Static3D(factor,factor,factor) );
127 427ab7bf Leszek Koltunski
        }
128
      
129
      Distorted.onSurfaceChanged(width, height); 
130
      }
131
132
///////////////////////////////////////////////////////////////////////////////////////////////////
133
    
134
    public void onSurfaceCreated(GL10 glUnused, EGLConfig config) 
135
      {
136
      InputStream is = mView.getContext().getResources().openRawResource(R.raw.water);
137
      Bitmap bitmap;
138
        
139
      try 
140
        {
141
        bitmap = BitmapFactory.decodeStream(is);
142
        } 
143
      finally 
144
        {
145
        try 
146
          {
147
          is.close();
148
          } 
149
        catch(IOException e) { }
150
        }  
151
      
152
      mRnd = new Random(0);
153
      
154
      bmpHeight = bitmap.getHeight();
155
      bmpWidth  = bitmap.getWidth();
156
      
157
      water = new DistortedBitmap(bitmap, 50);
158
      water.addEventListener(this);
159
      
160
      for(int i=0; i<NUM_BUBBLES; i++) randomizeNewBubble();
161
      
162
      try
163
        {
164 ed1c0b33 Leszek Koltunski
        Distorted.onSurfaceCreated(mView.getContext());
165 427ab7bf Leszek Koltunski
        }
166
      catch(Exception ex)
167
        {
168
        android.util.Log.e("Renderer", ex.getMessage() );
169
        }
170
      }
171
}