Project

General

Profile

« Previous | Next » 

Revision 3a91bfe1

Added by Leszek Koltunski over 7 years ago

Progress with GLOW.

Serious bug sorting Surface's children into postprocessing Buckets detected.

View differences:

src/main/java/org/distorted/examples/glow/GlowRenderer.java
26 26
import org.distorted.examples.R;
27 27
import org.distorted.library.Distorted;
28 28
import org.distorted.library.DistortedEffects;
29
import org.distorted.library.DistortedEffectsPostprocess;
29 30
import org.distorted.library.DistortedNode;
30 31
import org.distorted.library.DistortedScreen;
31 32
import org.distorted.library.DistortedTexture;
......
33 34
import org.distorted.library.EffectTypes;
34 35
import org.distorted.library.MeshFlat;
35 36
import org.distorted.library.MeshObject;
37
import org.distorted.library.message.EffectListener;
38
import org.distorted.library.message.EffectMessage;
36 39
import org.distorted.library.type.Dynamic1D;
40
import org.distorted.library.type.Dynamic4D;
37 41
import org.distorted.library.type.Static1D;
38 42
import org.distorted.library.type.Static3D;
43
import org.distorted.library.type.Static4D;
39 44

  
40 45
import java.io.IOException;
41 46
import java.io.InputStream;
......
45 50

  
46 51
///////////////////////////////////////////////////////////////////////////////////////////////////
47 52

  
48
class GlowRenderer implements GLSurfaceView.Renderer
53
class GlowRenderer implements GLSurfaceView.Renderer,EffectListener
49 54
{
50 55
   private static final int[] colors  = new int[] {0,0,1,  0,0,0,  1,0,0,  1,1,0,  0,1,0,  1,1,1}; // blue, black, red, yellow, green, white
51 56
   private static final int LEAF_SIZE = 100;
......
55 60
   private DistortedNode mRoot;
56 61
   private DistortedTexture mLeaf;
57 62
   private DistortedScreen mScreen;
63
   private DistortedEffectsPostprocess[] mLeafGlow = new DistortedEffectsPostprocess[NUM_LEAVES];
58 64
   private int mRootW, mRootH;
65
   private int mGlowing;
59 66

  
60 67
///////////////////////////////////////////////////////////////////////////////////////////////////
61 68

  
......
80 87

  
81 88
      for(int j=0; j<NUM_LEAVES; j++)
82 89
        {
90
        mLeafGlow[j] = new DistortedEffectsPostprocess();
91
        mLeafGlow[j].registerForMessages(this);
92

  
83 93
        leafEffects[j] = new DistortedEffects();
84 94
        leafEffects[j].rotate( new Static1D(j*(360/NUM_LEAVES)), axis, center );
85 95
        leafEffects[j].move(moveVector);
86 96
        leafEffects[j].chroma( chromaLevel, new Static3D(colors[3*j],colors[3*j+1], colors[3*j+2]) );
87

  
88
        mRoot.attach( mLeaf, leafEffects[j], mesh);
97
        DistortedNode node = new DistortedNode( mLeaf, leafEffects[j], mesh);
98
        node.setPostprocessEffects(mLeafGlow[j]);
99
        mRoot.attach(node);
89 100
        }
90 101

  
102
      makeGlow(0);
103

  
91 104
      mScreen = new DistortedScreen(mView);
92 105
      mScreen.attach(mRoot);
93 106
      }
94 107

  
95 108
///////////////////////////////////////////////////////////////////////////////////////////////////
96
   
97
    public void onDrawFrame(GL10 glUnused) 
98
      {
99
      mScreen.render(System.currentTimeMillis());
100
      }
109

  
110
   private void makeGlow(int leaf)
111
     {
112
     //android.util.Log.e("glow", "glowing: "+leaf);
113

  
114
     mGlowing = leaf;
115

  
116
     Dynamic1D radius = new Dynamic1D(5000,1.0f);
117
     Static1D startR  = new Static1D( 0);
118
     Static1D endR    = new Static1D(50);
119
     radius.add(startR);
120
     radius.add(endR);
121

  
122
     Dynamic4D color  = new Dynamic4D(5000,1.0f);
123
     Static4D startC  = new Static4D(colors[3*leaf],colors[3*leaf+1], colors[3*leaf+2], 0);
124
     Static4D endC    = new Static4D(colors[3*leaf],colors[3*leaf+1], colors[3*leaf+2], 1);
125
     color.add(startC);
126
     color.add(endC);
127

  
128
     mLeafGlow[leaf].glow( radius, color );
129
     }
101 130

  
102 131
///////////////////////////////////////////////////////////////////////////////////////////////////
103
    
104
    public void onSurfaceChanged(GL10 glUnused, int width, int height) 
105
      {
106
      float qw = (float)width /mRootW;
107
      float qh = (float)height/mRootH;
108
      float factor = 0.6f* (qw<qh ? qw:qh);
109
      int w = (int)(factor*mRootW);
110
      int h = (int)(factor*mRootH);
111

  
112
      Dynamic1D rot = new Dynamic1D(5000,0.0f);
113
      rot.setMode(Dynamic1D.MODE_JUMP);
114
      rot.add(new Static1D(  0));
115
      rot.add(new Static1D(360));
116

  
117
      Static3D center = new Static3D(3*LEAF_SIZE/2, 3*LEAF_SIZE/2, 0);
118
      Static3D axis   = new Static3D(0,0,1);
119

  
120
      DistortedEffects effects = mRoot.getEffects();
121
      effects.abortEffects(EffectTypes.MATRIX);
122
      effects.move( new Static3D((width-w)/2 ,(height-h)/2, 0) );
123
      effects.scale( factor );
124
      effects.rotate( rot, axis, center );
125

  
126
      mScreen.resize(width, height);
127
      }
132
// Glow finished. Make the next Leaf glow.
133

  
134
   public void effectMessage(final EffectMessage em, final long effectID, final EffectNames effectName, final long objectID)
135
     {
136
     switch(em)
137
       {
138
       case EFFECT_FINISHED: //android.util.Log.e("glow", "effectMessage FINISHED");
139
                             int glowing = mGlowing+1;
140
                             if( glowing>=NUM_LEAVES ) glowing = 0;
141
                             makeGlow(glowing);
142
                             break;
143
       default:              //android.util.Log.e("glow", "effectMessage REMOVED");
144
                             break;
145
       }
146
     }
128 147

  
129 148
///////////////////////////////////////////////////////////////////////////////////////////////////
130
    
131
    public void onSurfaceCreated(GL10 glUnused, EGLConfig config) 
132
      {
133
      InputStream is = mView.getContext().getResources().openRawResource(R.raw.leaf);
134
      Bitmap leaf;
135
      
136
      try 
137
        {
138
        leaf = BitmapFactory.decodeStream(is);
139
        } 
140
      finally 
141
        {
142
        try 
143
          {
144
          is.close();
145
          } 
146
        catch(IOException e) { }
147
        }  
148
      
149
      mLeaf.setTexture(leaf);
150 149

  
151
      DistortedEffects.enableEffect(EffectNames.CHROMA);
152
      DistortedEffects.enableEffect(EffectNames.GLOW);
150
   public void onDrawFrame(GL10 glUnused)
151
     {
152
     mScreen.render(System.currentTimeMillis());
153
     }
154

  
155
///////////////////////////////////////////////////////////////////////////////////////////////////
156
    
157
   public void onSurfaceChanged(GL10 glUnused, int width, int height)
158
     {
159
     float qw = (float)width /mRootW;
160
     float qh = (float)height/mRootH;
161
     float factor = 0.6f* (qw<qh ? qw:qh);
162
     int w = (int)(factor*mRootW);
163
     int h = (int)(factor*mRootH);
164

  
165
     Dynamic1D rot = new Dynamic1D(5000,0.0f);
166
     rot.setMode(Dynamic1D.MODE_JUMP);
167
     rot.add(new Static1D(  0));
168
     rot.add(new Static1D(360));
169

  
170
     Static3D center = new Static3D(3*LEAF_SIZE/2, 3*LEAF_SIZE/2, 0);
171
     Static3D axis   = new Static3D(0,0,1);
172

  
173
     DistortedEffects effects = mRoot.getEffects();
174
     effects.abortEffects(EffectTypes.MATRIX);
175
     effects.move( new Static3D((width-w)/2 ,(height-h)/2, 0) );
176
     effects.scale( factor );
177
     effects.rotate( rot, axis, center );
178

  
179
     mScreen.resize(width, height);
180
     }
153 181

  
154
      try
155
        {
156
        Distorted.onCreate(mView.getContext());
157
        }
158
      catch(Exception ex)
159
        {
160
        android.util.Log.e("Glow", ex.getMessage() );
161
        }
162
      }
163
 
164 182
///////////////////////////////////////////////////////////////////////////////////////////////////
165 183
    
184
   public void onSurfaceCreated(GL10 glUnused, EGLConfig config)
185
     {
186
     InputStream is = mView.getContext().getResources().openRawResource(R.raw.leaf);
187
     Bitmap leaf;
188
      
189
     try
190
       {
191
       leaf = BitmapFactory.decodeStream(is);
192
       }
193
     finally
194
       {
195
       try
196
         {
197
         is.close();
198
         }
199
       catch(IOException e) { }
200
       }
201
      
202
     mLeaf.setTexture(leaf);
203

  
204
     DistortedEffects.enableEffect(EffectNames.CHROMA);
205
     DistortedEffects.enableEffect(EffectNames.GLOW);
206

  
207
     try
208
       {
209
       Distorted.onCreate(mView.getContext());
210
       }
211
     catch(Exception ex)
212
       {
213
       android.util.Log.e("Glow", ex.getMessage() );
214
       }
215
     }
166 216
}
src/main/java/org/distorted/examples/listener/ListenerRenderer.java
109 109

  
110 110
///////////////////////////////////////////////////////////////////////////////////////////////////
111 111
    
112
    public void onSurfaceChanged(GL10 glUnused, int width, int height) 
113
      { 
114
      mEffects.abortEffects(EffectTypes.MATRIX);
112
   public void onSurfaceChanged(GL10 glUnused, int width, int height)
113
     {
114
     mEffects.abortEffects(EffectTypes.MATRIX);
115 115
         
116
      if( (float)bmpHeight/bmpWidth > (float)height/width )
117
        {
118
        int w = (height*bmpWidth)/bmpHeight;
119
        float factor = (float)height/bmpHeight;
120

  
121
        mEffects.move( new Static3D((width-w)/2,0,0) );
122
        mEffects.scale(factor);
123
        }
124
      else
125
        {
126
        int h = (width*bmpHeight)/bmpWidth;
127
        float factor = (float)width/bmpWidth;
128

  
129
        mEffects.move( new Static3D(0,(height-h)/2,0) );
130
        mEffects.scale(factor);
131
        }
116
     if( (float)bmpHeight/bmpWidth > (float)height/width )
117
       {
118
       int w = (height*bmpWidth)/bmpHeight;
119
       float factor = (float)height/bmpHeight;
120

  
121
       mEffects.move( new Static3D((width-w)/2,0,0) );
122
       mEffects.scale(factor);
123
       }
124
     else
125
       {
126
       int h = (width*bmpHeight)/bmpWidth;
127
       float factor = (float)width/bmpWidth;
128

  
129
       mEffects.move( new Static3D(0,(height-h)/2,0) );
130
       mEffects.scale(factor);
131
       }
132 132
      
133
      mScreen.resize(width, height);
134
      }
133
     mScreen.resize(width, height);
134
     }
135 135

  
136 136
///////////////////////////////////////////////////////////////////////////////////////////////////
137 137
    
138
    public void onSurfaceCreated(GL10 glUnused, EGLConfig config) 
139
      {
140
      InputStream is = mView.getContext().getResources().openRawResource(R.raw.water);
141
      Bitmap bitmap;
138
   public void onSurfaceCreated(GL10 glUnused, EGLConfig config)
139
     {
140
     InputStream is = mView.getContext().getResources().openRawResource(R.raw.water);
141
     Bitmap bitmap;
142 142
        
143
      try 
144
        {
145
        bitmap = BitmapFactory.decodeStream(is);
146
        } 
147
      finally 
148
        {
149
        try 
150
          {
151
          is.close();
152
          } 
153
        catch(IOException e) { }
154
        }  
155

  
156
      bmpHeight = bitmap.getHeight();
157
      bmpWidth  = bitmap.getWidth();
158

  
159
      if( mTexture==null ) mTexture = new DistortedTexture(bmpWidth,bmpHeight);
160
      mTexture.setTexture(bitmap);
161

  
162
      if( mMesh==null ) mMesh = new MeshFlat(50,50*bmpHeight/bmpWidth);
163

  
164
      mScreen.detachAll();
165
      mScreen.attach(mTexture,mEffects,mMesh);
166

  
167
      for(int i=0; i<NUM_BUBBLES; i++) randomizeNewBubble();
168

  
169
      DistortedEffects.enableEffect(EffectNames.DISTORT);
170

  
171
      try
172
        {
173
        Distorted.onCreate(mView.getContext());
174
        }
175
      catch(Exception ex)
176
        {
177
        android.util.Log.e("Renderer", ex.getMessage() );
178
        }
179
      }
143
     try
144
       {
145
       bitmap = BitmapFactory.decodeStream(is);
146
       }
147
     finally
148
       {
149
       try
150
         {
151
         is.close();
152
         }
153
       catch(IOException e) { }
154
       }
155

  
156
     bmpHeight = bitmap.getHeight();
157
     bmpWidth  = bitmap.getWidth();
158

  
159
     if( mTexture==null ) mTexture = new DistortedTexture(bmpWidth,bmpHeight);
160
     mTexture.setTexture(bitmap);
161

  
162
     if( mMesh==null ) mMesh = new MeshFlat(50,50*bmpHeight/bmpWidth);
163

  
164
     mScreen.detachAll();
165
     mScreen.attach(mTexture,mEffects,mMesh);
166

  
167
     for(int i=0; i<NUM_BUBBLES; i++) randomizeNewBubble();
168

  
169
     DistortedEffects.enableEffect(EffectNames.DISTORT);
170

  
171
     try
172
       {
173
       Distorted.onCreate(mView.getContext());
174
       }
175
     catch(Exception ex)
176
       {
177
       android.util.Log.e("Renderer", ex.getMessage() );
178
       }
179
     }
180 180
}

Also available in: Unified diff