Project

General

Profile

« Previous | Next » 

Revision e052248f

Added by Leszek Koltunski over 4 years ago

Port Listener to the new setStretch-less API.

View differences:

src/main/java/org/distorted/examples/listener/ListenerRenderer.java
46 46
import android.opengl.GLSurfaceView;
47 47

  
48 48
///////////////////////////////////////////////////////////////////////////////////////////////////
49
// Show how to use the setMax, notifyWhenFinished / effectFinished APIs
49 50

  
50 51
class ListenerRenderer implements GLSurfaceView.Renderer,EffectListener 
51 52
{
......
56 57
   private DistortedScreen mScreen;
57 58
   private DistortedTexture mTexture;
58 59
   private MeshRectangles mMesh;
59
   private int bmpHeight, bmpWidth;
60 60
   private Random mRnd;
61 61
   private Static3D mScale;
62
   private float mBmpRatio;
62 63

  
63 64
///////////////////////////////////////////////////////////////////////////////////////////////////
64 65

  
......
66 67
      {
67 68
      mView = v;
68 69

  
69
      mScreen = new DistortedScreen();
70
      mRnd = new Random(0);
71
      mScale= new Static3D(1,1,1);
70
      mTexture = new DistortedTexture();
71
      mScreen  = new DistortedScreen();
72
      mRnd     = new Random(0);
73
      mScale   = new Static3D(1,1,1);
74
      mEffects = new DistortedEffects();
75
      mEffects.apply(new MatrixEffectScale(mScale));
76

  
77
      for(int i=0; i<NUM_CONCURRENT_BUBBLES; i++)
78
        {
79
        VertexEffectDistort newEffect = createNewBubble();
80

  
81
        if( !mEffects.apply(newEffect) )
82
          {
83
          android.util.Log.e("listener", "failed to add bubble - this should never happen!");
84
          }
85
        }
72 86
      }
73 87

  
74 88
///////////////////////////////////////////////////////////////////////////////////////////////////
75 89

  
76
   private boolean addNewBubble()
90
   private VertexEffectDistort createNewBubble()
77 91
      {
78
      int radius   = (int)(( 0.10f + 0.70f*mRnd.nextFloat())*bmpWidth); // pop up a bubble of size (radius,height)
79
      int height   = (int)((-0.10f + 0.20f*mRnd.nextFloat())*bmpWidth); //
80
      int pointx   = (int)(0.8f * bmpWidth * (mRnd.nextFloat()-0.5f));  // at a random place on the bitmap (but not near the edge)
81
      int pointy   = (int)(0.8f * bmpHeight* (mRnd.nextFloat()-0.5f));  //
82
      int duration = 1000 + mRnd.nextInt(3000);                         // for anytime from 1 to 4 seconds
92
      float radius =  0.10f + 0.70f*mRnd.nextFloat() ; // pop up a bubble of size (radius,height)
93
      float height = -0.10f + 0.20f*mRnd.nextFloat() ; //
94
      float pointx =  0.80f * (mRnd.nextFloat()-0.5f); // at a random place on the bitmap (but not near the edge)
95
      float pointy =  0.80f * (mRnd.nextFloat()-0.5f); //
96
      int duration =   1000 + mRnd.nextInt(3000);      // for anytime from 1 to 4 seconds
83 97

  
98
      // '1.0f' i.e. from (0,0,0) to (0,0,height) and back to (0,0,0) - full circle.
84 99
      Dynamic3D dDistort = new Dynamic3D(duration,1.0f);
85 100
      dDistort.add(new Static3D(0,0,     0));
86 101
      dDistort.add(new Static3D(0,0,height));
87 102

  
88
      VertexEffectDistort distort = new VertexEffectDistort(dDistort, new Static3D(pointx,pointy,0), new Static4D(0,0,0,radius));
103
      Static3D center = new Static3D(pointx,pointy,0);
104
      Static4D region = new Static4D(0,0,0,radius);
105
      VertexEffectDistort distort = new VertexEffectDistort(dDistort,center,region);
106

  
107
      // We want to know when this effect finishes so that we can add a new one.
89 108
      distort.notifyWhenFinished(this);
90 109

  
91
      return mEffects.apply(distort);
110
      return distort;
92 111
      }
93 112
   
94 113
///////////////////////////////////////////////////////////////////////////////////////////////////
114
// An effect just finished, i.e. its Dynamic 'dDistort' reached its end point.
115
// The ID of the finished effect is 'effectID' but here we know it must be one of the Distorts
116
// and we don't care which one it is - just remove the finished effect from the Effect queues and
117
// add a new one right back in.
95 118

  
96 119
   public void effectFinished(final long effectID)
97 120
     {
98 121
     mEffects.abortById(effectID);
99 122

  
100
     if( !addNewBubble() )
123
     VertexEffectDistort newEffect = createNewBubble();
124

  
125
     if( !mEffects.apply(newEffect) )
101 126
       {
102 127
       android.util.Log.e("Listener", "failed to add new bubble - this should never happen!");
103 128
       }
......
105 130
   
106 131
///////////////////////////////////////////////////////////////////////////////////////////////////
107 132

  
108
    public void onDrawFrame(GL10 glUnused) 
133
   public void onDrawFrame(GL10 glUnused)
109 134
      {
110 135
      mScreen.render( System.currentTimeMillis() );
111 136
      }
......
114 139
    
115 140
   public void onSurfaceChanged(GL10 glUnused, int width, int height)
116 141
     {
117
     float horiRatio = (float)width / mMesh.getStretchX();
118
     float vertRatio = (float)height/ mMesh.getStretchY();
119
     float factor    = horiRatio > vertRatio ? vertRatio : horiRatio;
142
     float min= width>height ? height : width;
120 143

  
121
     mScale.set( factor,factor,factor );
144
     mScale.set( min, min*mBmpRatio, min );
122 145
     mScreen.resize(width, height);
123 146
     }
124 147

  
......
142 165
       catch(IOException e) { }
143 166
       }
144 167

  
145
     bmpHeight = bitmap.getHeight();
146
     bmpWidth  = bitmap.getWidth();
147

  
148
     if( mTexture==null ) mTexture = new DistortedTexture();
168
     mBmpRatio = (float)bitmap.getHeight()/bitmap.getWidth();
149 169
     mTexture.setTexture(bitmap);
150 170

  
151
     if( mMesh==null )
152
       {
153
       mMesh = new MeshRectangles(50,50*bmpHeight/bmpWidth);
154
       mMesh.setStretch(bmpWidth,bmpHeight,0);
155
       }
156

  
157
     if( mEffects==null )
158
       {
159
       mEffects = new DistortedEffects();
160
       mEffects.apply(new MatrixEffectScale(mScale));
161
       }
171
     if( mMesh==null ) mMesh = new MeshRectangles(50, (int)(50*mBmpRatio) );
162 172

  
163 173
     mScreen.detachAll();
164 174
     mScreen.attach(mTexture,mEffects,mMesh);
165 175

  
166
     for(int i = 0; i< NUM_CONCURRENT_BUBBLES; i++) addNewBubble();
167

  
168
     // one more than we have bubbles at any given time because it can sometimes
169
     // happen that the old bubble is not yet removed when we add a new one
176
     // Normally we can only hold no more than 5 (see EffectType.reset()) Vertex
177
     // effects at any given time. Here we want 12, so we need to increase the default.
178
     // We need to call this before we call onCreate; best done here.
179
     // After onCreate we can also call this but only to decrease this value!
180
     //
181
     // One more than we have bubbles at any given time because it can sometimes
182
     // happen that the old bubble is not yet removed when we add a new one.
170 183
     DistortedLibrary.setMax(EffectType.VERTEX,NUM_CONCURRENT_BUBBLES+1);
171 184
     VertexEffectDistort.enable();
172 185

  

Also available in: Unified diff