Project

General

Profile

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

examples / src / main / java / org / distorted / examples / starwars / StarWarsRenderer.java @ 0e65f4da

1 bc0a685b Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2016 Leszek Koltunski                                                               //
3
//                                                                                               //
4 71c8884f Leszek Koltunski
// This file is part of Distorted.                                                               //
5 bc0a685b Leszek Koltunski
//                                                                                               //
6 71c8884f Leszek Koltunski
// Distorted is free software: you can redistribute it and/or modify                             //
7 bc0a685b Leszek Koltunski
// 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 71c8884f Leszek Koltunski
// Distorted is distributed in the hope that it will be useful,                                  //
12 bc0a685b Leszek Koltunski
// 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 71c8884f Leszek Koltunski
// along with Distorted.  If not, see <http://www.gnu.org/licenses/>.                            //
18 bc0a685b Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
19 427ab7bf Leszek Koltunski
20 5068fa06 Leszek Koltunski
package org.distorted.examples.starwars;
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
31 fc448f77 Leszek Koltunski
import org.distorted.library.effect.FragmentEffectAlpha;
32
import org.distorted.library.effect.MatrixEffectMove;
33
import org.distorted.library.effect.MatrixEffectRotate;
34
import org.distorted.library.effect.MatrixEffectScale;
35 01782e85 Leszek Koltunski
import org.distorted.library.main.DistortedNode;
36
import org.distorted.library.main.DistortedScreen;
37 698ad0a8 Leszek Koltunski
import org.distorted.library.mesh.MeshQuad;
38 7589635e Leszek Koltunski
import org.distorted.library.type.Dynamic1D;
39
import org.distorted.library.type.Dynamic3D;
40
import org.distorted.library.type.Static1D;
41
import org.distorted.library.type.Static3D;
42 13efa930 Leszek Koltunski
import org.distorted.library.message.EffectListener;
43 e3900503 Leszek Koltunski
import org.distorted.library.main.DistortedLibrary;
44 01782e85 Leszek Koltunski
import org.distorted.library.main.DistortedTexture;
45
import org.distorted.library.main.DistortedEffects;
46 427ab7bf Leszek Koltunski
47
import android.graphics.Bitmap;
48
import android.graphics.BitmapFactory;
49
import android.graphics.Canvas;
50
import android.graphics.Paint;
51
import android.graphics.Typeface;
52 41a85bb7 Leszek Koltunski
import android.opengl.GLES31;
53 427ab7bf Leszek Koltunski
import android.opengl.GLSurfaceView;
54
55
///////////////////////////////////////////////////////////////////////////////////////////////////
56
57 061449ed Leszek Koltunski
class StarWarsRenderer implements GLSurfaceView.Renderer, EffectListener, DistortedLibrary.ExceptionListener
58 bc0a685b Leszek Koltunski
  {
59
  private final String[] mGFFAString = 
60 427ab7bf Leszek Koltunski
         
61
            { "A long time ago, in a galaxy far,",
62
              "far away...." };                    // yes, there really was a four-dot ellipsis
63
64 bc0a685b Leszek Koltunski
  private final String[] mCRAWLString = 
65 427ab7bf Leszek Koltunski
      
66
            { "It is a period of civil war.",      // in the original 1977 version, there was no 
67
              "Rebel spaceships, striking",        // 'Episode IV New Hope' subtitle line before
68
              "from a hidden base, have",          // the crawl. Lets keep to the classic.
69
              "won their first victory",
70
              "against the evil Galactic",
71
              "Empire.",
72
              "",
73
              "During the battle, rebel",
74
              "spies managed to steal",
75
              "secret plans to the Empire's",
76
              "ultimate weapon, the",
77
              "DEATH STAR, an armored",
78
              "space station with enough",
79
              "power to destroy an entire",
80
              "planet.",
81
              "",
82
              "Pursued by the Empire's",
83
              "sinister agents, Princess",
84
              "Leia races home aboard her",
85
              "starship, custodian of the",
86
              "stolen plans that can save",
87
              "her people and restore",
88
              "freedom to the galaxy...." };      // four-dot.
89
   
90 76f2d645 leszek
  private final int NUM_STARS = 40;
91 427ab7bf Leszek Koltunski
   
92 bc0a685b Leszek Koltunski
  private final int CRAWL_COLOR = 0xffffe81f;
93
  private final int GFFA_COLOR  = 0xff0000ff;
94
  private final int FONT_HEIGHT      = 40;
95
  private final int VERTICAL_SPACING = 10;
96
  private final String CRAWL_TYPEFACE = "News Gothic";
97 427ab7bf Leszek Koltunski
   
98 bc0a685b Leszek Koltunski
  private final int CRAWL_WIDTH = 500;
99
  private final int CRAWL_HEIGHT= (FONT_HEIGHT+VERTICAL_SPACING)*(mCRAWLString.length+1);
100 427ab7bf Leszek Koltunski
   
101 bc0a685b Leszek Koltunski
  private final int GFFA_WIDTH = 600;
102
  private final int GFFA_HEIGHT= (FONT_HEIGHT+VERTICAL_SPACING)*(mGFFAString.length+1);
103 427ab7bf Leszek Koltunski
   
104 bc0a685b Leszek Koltunski
  private final float CRAWL_ANGLE = -30.0f;
105 2f7afccf leszek
  private final float FOV_ANGLE   =  60.0f;
106
107 bc0a685b Leszek Koltunski
  private GLSurfaceView mView;
108 d2aee6cc leszek
  private DistortedTexture mGFFATexture, mLogoTexture, mCrawlTexture, mCrawlBackgroundTexture, mStarTexture;
109
  private DistortedEffects mGFFAEffects, mLogoEffects, mCrawlEffects, mCrawlBackgroundEffects;
110 d04a4886 Leszek Koltunski
  private DistortedEffects[] mStarEffects;
111 d2aee6cc leszek
  private DistortedNode mBackground;
112 d218d64e leszek
  private DistortedScreen mScreen;
113 5a683295 Leszek Koltunski
  private MeshQuad mQuad;
114 392e16fd Leszek Koltunski
115 8d5a8e06 Leszek Koltunski
  private long alphaEffectID, scaleEffectID, moveEffectID;
116 392e16fd Leszek Koltunski
  private Random mRnd = new Random(0);
117 c4f5a8db Leszek Koltunski
  private int mWidth, mHeight;
118 5a683295 Leszek Koltunski
  private float mLogoRatio;
119
  private int mCrawlBackgroundW, mCrawlBackgroundH;
120 e8b6aa95 Leszek Koltunski
121 427ab7bf Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
122
123 e7a4ef16 Leszek Koltunski
  StarWarsRenderer(GLSurfaceView v)
124 bc0a685b Leszek Koltunski
    {
125
    mView = v;
126 e8b6aa95 Leszek Koltunski
127 5a683295 Leszek Koltunski
    mQuad = new MeshQuad();
128 698ad0a8 Leszek Koltunski
129
    mGFFAEffects            = new DistortedEffects();
130
    mLogoEffects            = new DistortedEffects();
131
    mCrawlEffects           = new DistortedEffects();
132
    mCrawlBackgroundEffects = new DistortedEffects();
133 f6d884d5 Leszek Koltunski
134 3f5b2cb3 leszek
    if( NUM_STARS>0 )
135
      {
136
      mStarEffects = new DistortedEffects[NUM_STARS];
137 698ad0a8 Leszek Koltunski
      mStarEffects[0] = new DistortedEffects();
138 f6d884d5 Leszek Koltunski
139 3f5b2cb3 leszek
      for (int i = 1; i < NUM_STARS; i++)
140 e3900503 Leszek Koltunski
        mStarEffects[i] = new DistortedEffects(mStarEffects[0], DistortedLibrary.CLONE_VERTEX);
141 3f5b2cb3 leszek
      }
142 f6d884d5 Leszek Koltunski
143 e4330c89 Leszek Koltunski
    mScreen = new DistortedScreen();
144 2f7afccf leszek
    mScreen.setProjection(FOV_ANGLE, 0.02f);
145 bc0a685b Leszek Koltunski
    }
146 427ab7bf Leszek Koltunski
147 c4f5a8db Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
148
149
  public void onPause()
150
    {
151
    mWidth = 0;
152
    mHeight= 0;
153
    }
154
155 427ab7bf Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
156
   
157 bc0a685b Leszek Koltunski
  public void onDrawFrame(GL10 glUnused) 
158
    {
159 fe59d375 Leszek Koltunski
    mScreen.render(System.currentTimeMillis());
160 bc0a685b Leszek Koltunski
    }
161 427ab7bf Leszek Koltunski
162
///////////////////////////////////////////////////////////////////////////////////////////////////
163
    
164 bc0a685b Leszek Koltunski
  public void onSurfaceChanged(GL10 glUnused, int width, int height) 
165 b4cc083b Leszek Koltunski
    {
166 c4f5a8db Leszek Koltunski
    if( mWidth!=width || mHeight!=height )  // after onPause() we get 2 calls here
167
      {
168
      mWidth = width;
169
      mHeight= height;
170 b4cc083b Leszek Koltunski
171 392e16fd Leszek Koltunski
      mGFFAEffects.abortAllEffects();
172
      mLogoEffects.abortAllEffects();
173
      mCrawlEffects.abortAllEffects();
174
      mCrawlBackgroundEffects.abortAllEffects();
175 b4cc083b Leszek Koltunski
176 d04a4886 Leszek Koltunski
      for(int i=0; i<NUM_STARS; i++) mStarEffects[i].abortAllEffects();
177 b4cc083b Leszek Koltunski
178 fe59d375 Leszek Koltunski
      mScreen.detachAll();
179 d2aee6cc leszek
      setupScreen(width,height);
180 392e16fd Leszek Koltunski
      mScreen.resize(width, height);
181 c4f5a8db Leszek Koltunski
      }
182 bc0a685b Leszek Koltunski
    }
183 427ab7bf Leszek Koltunski
184
///////////////////////////////////////////////////////////////////////////////////////////////////
185
    
186 bc0a685b Leszek Koltunski
  public void onSurfaceCreated(GL10 glUnused, EGLConfig config) 
187
    {
188
    setupBitmaps();
189 885b9cca leszek
    FragmentEffectAlpha.enable();
190 7c72e798 Leszek Koltunski
    DistortedLibrary.onSurfaceCreated(mView.getContext(), this);
191 061449ed Leszek Koltunski
    }
192 6637d0f2 Leszek Koltunski
193 061449ed Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
194
195
  public void distortedException(Exception ex)
196
    {
197
    android.util.Log.e("StarWars", ex.getMessage() );
198 bc0a685b Leszek Koltunski
    }
199 061449ed Leszek Koltunski
200 427ab7bf Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
201
202 16b22aab Leszek Koltunski
  private void setupScreen(int scrW, int scrH)
203 bc0a685b Leszek Koltunski
    {
204 16b22aab Leszek Koltunski
    double angleA = (90.0f - FOV_ANGLE/2              ) * Math.PI/180;
205
    double angleB = (90.0f - FOV_ANGLE/2 + CRAWL_ANGLE) * Math.PI/180;
206 2f7afccf leszek
207 59540ba2 Leszek Koltunski
    if( mCrawlBackgroundTexture!=null ) mCrawlBackgroundTexture.markForDeletion();
208 687263cc Leszek Koltunski
    mCrawlBackgroundTexture = new DistortedTexture();
209
210 5a683295 Leszek Koltunski
    mCrawlBackgroundW = scrW;
211
    mCrawlBackgroundH = (int)(scrH*Math.sin(angleA)/Math.sin(angleB));
212 e8e54972 Leszek Koltunski
213 630703d1 leszek
    int randomA, randomX, randomY, randomTime;
214
    float randomS, randomAlpha1, randomAlpha2;
215
       
216
    Static3D center = new Static3D(0,0,0);
217
    Static3D axis   = new Static3D(0,0,1);
218 9ff0c8c3 Leszek Koltunski
    Static1D alphaNoise = new Static1D(0.4f);
219
220 bc0a685b Leszek Koltunski
    for(int i=0; i<NUM_STARS; i++)
221
      {
222 16b22aab Leszek Koltunski
      randomX = mRnd.nextInt(scrW) - scrW/2;
223
      randomY = mRnd.nextInt(scrH) - scrH/2;
224 5a683295 Leszek Koltunski
      randomS = (0.2f+ 0.8f*mRnd.nextFloat())*20;
225 630703d1 leszek
      randomA = (int)(180*mRnd.nextFloat());
226 bc0a685b Leszek Koltunski
      randomAlpha1 = 0.2f + 0.8f*mRnd.nextFloat();
227
      randomAlpha2 = 0.8f + 0.2f*mRnd.nextFloat();
228
      randomTime = 500+mRnd.nextInt(2000);
229 e8e54972 Leszek Koltunski
230 fc448f77 Leszek Koltunski
      mStarEffects[i].apply( new MatrixEffectRotate(new Static1D(randomA), axis, center) );
231 e8e54972 Leszek Koltunski
      mStarEffects[i].apply( new MatrixEffectScale(randomS) );
232
      mStarEffects[i].apply( new MatrixEffectMove(new Static3D(randomX,randomY,0)) );
233
234 f988589e Leszek Koltunski
      Dynamic1D di = new Dynamic1D(randomTime,0.0f);
235 9ff0c8c3 Leszek Koltunski
      di.setNoise(alphaNoise);
236 7589635e Leszek Koltunski
      di.add(new Static1D(randomAlpha1));
237
      di.add(new Static1D(randomAlpha2));
238 427ab7bf Leszek Koltunski
      
239 fc448f77 Leszek Koltunski
      mStarEffects[i].apply( new FragmentEffectAlpha(di) );
240 427ab7bf Leszek Koltunski
      
241 5a683295 Leszek Koltunski
      mScreen.attach(mStarTexture, mStarEffects[i], mQuad);
242 427ab7bf Leszek Koltunski
      }
243 5a683295 Leszek Koltunski
244 f988589e Leszek Koltunski
    Dynamic1D di = new Dynamic1D(6000,0.5f);
245 7589635e Leszek Koltunski
    di.add(new Static1D(1.0f));
246
    di.add(new Static1D(1.0f));
247
    di.add(new Static1D(0.0f));
248 e8e54972 Leszek Koltunski
249
    FragmentEffectAlpha alpha = new FragmentEffectAlpha(di);
250
    alpha.notifyWhenFinished(this);
251
    alphaEffectID = alpha.getID();
252
253 5a683295 Leszek Koltunski
    Static3D scale = new Static3D(0.5f*scrW, 0.5f*scrW * GFFA_HEIGHT / GFFA_WIDTH, 1);
254
255 fc448f77 Leszek Koltunski
    mGFFAEffects.apply( new MatrixEffectScale(scale) );
256 5a683295 Leszek Koltunski
    mGFFAEffects.apply( new MatrixEffectMove(new Static3D(-scrW/3 + GFFA_WIDTH/2 ,scrH/6,0)) );
257 e8e54972 Leszek Koltunski
    mGFFAEffects.apply( alpha );
258 bc0a685b Leszek Koltunski
      
259 5a683295 Leszek Koltunski
    mScreen.attach(mGFFATexture, mGFFAEffects, mQuad);
260 bc0a685b Leszek Koltunski
    }
261 427ab7bf Leszek Koltunski
    
262
///////////////////////////////////////////////////////////////////////////////////////////////////
263
264 bc0a685b Leszek Koltunski
  private void setupBitmaps()
265
    {
266
    InputStream is1 = mView.getContext().getResources().openRawResource(R.raw.starwars);
267
    InputStream is2 = mView.getContext().getResources().openRawResource(R.raw.star);
268 427ab7bf Leszek Koltunski
    
269 bc0a685b Leszek Koltunski
    Bitmap bitmapStar, bitmapGFFA, bitmapLogo, bitmapText;
270
      
271
    try 
272
      {
273
      bitmapLogo = BitmapFactory.decodeStream(is1);
274
      bitmapStar = BitmapFactory.decodeStream(is2);
275
      } 
276
    finally 
277
      {
278 427ab7bf Leszek Koltunski
      try 
279
        {
280 bc0a685b Leszek Koltunski
        is1.close();
281
        is2.close();
282 427ab7bf Leszek Koltunski
        } 
283 bc0a685b Leszek Koltunski
      catch(IOException e) { }
284
      } 
285 427ab7bf Leszek Koltunski
      
286 bc0a685b Leszek Koltunski
    Paint paint = new Paint();
287
    paint.setAntiAlias(true);
288
    paint.setTextAlign(Paint.Align.LEFT);
289
    paint.setTextSize(FONT_HEIGHT);
290
    paint.setColor(GFFA_COLOR);
291 427ab7bf Leszek Koltunski
      
292 bc0a685b Leszek Koltunski
    Typeface tf = Typeface.create(CRAWL_TYPEFACE, Typeface.BOLD);
293
    paint.setTypeface(tf);     
294 427ab7bf Leszek Koltunski
 
295 bc0a685b Leszek Koltunski
    ///// create GFFA ///////////////////
296 687263cc Leszek Koltunski
    if( mGFFATexture==null ) mGFFATexture  = new DistortedTexture();
297 bc0a685b Leszek Koltunski
    bitmapGFFA = Bitmap.createBitmap(GFFA_WIDTH,GFFA_HEIGHT,Bitmap.Config.ARGB_8888);
298
    bitmapGFFA.eraseColor(0x00000000);
299
    Canvas gffaCanvas = new Canvas(bitmapGFFA);
300 427ab7bf Leszek Koltunski
      
301 bc0a685b Leszek Koltunski
    for(int i=0; i<mGFFAString.length; i++)
302
      {
303
      gffaCanvas.drawText(mGFFAString[i], 0, (i+1)*(FONT_HEIGHT+VERTICAL_SPACING), paint);  
304
      }
305 427ab7bf Leszek Koltunski
  
306 f6d884d5 Leszek Koltunski
    mGFFATexture.setTexture(bitmapGFFA);
307 427ab7bf Leszek Koltunski
      
308 bc0a685b Leszek Koltunski
    ///// create Logo ///////////////////
309 5a683295 Leszek Koltunski
    if( mLogoTexture==null ) mLogoTexture = new DistortedTexture();
310 f6d884d5 Leszek Koltunski
    mLogoTexture.setTexture(bitmapLogo);
311 5a683295 Leszek Koltunski
    mLogoRatio = (float)bitmapLogo.getWidth()/bitmapLogo.getHeight();
312 e8b6aa95 Leszek Koltunski
313 bc0a685b Leszek Koltunski
    ///// create CRAWL //////////////////
314 687263cc Leszek Koltunski
    if( mCrawlTexture==null ) mCrawlTexture = new DistortedTexture();
315 bc0a685b Leszek Koltunski
    bitmapText = Bitmap.createBitmap(CRAWL_WIDTH,CRAWL_HEIGHT,Bitmap.Config.ARGB_8888);
316
    bitmapText.eraseColor(0x00000000);
317
    Canvas textCanvas = new Canvas(bitmapText);
318
    paint.setColor(CRAWL_COLOR);
319 427ab7bf Leszek Koltunski
  
320 bc0a685b Leszek Koltunski
    for(int i=0; i<mCRAWLString.length; i++)
321
      {
322
      displayJustified(mCRAWLString[i], 0, (i+1)*(FONT_HEIGHT+VERTICAL_SPACING), CRAWL_WIDTH, textCanvas, paint);  
323
      }
324 427ab7bf Leszek Koltunski
      
325 f6d884d5 Leszek Koltunski
    mCrawlTexture.setTexture(bitmapText);
326 427ab7bf Leszek Koltunski
      
327 bc0a685b Leszek Koltunski
    ///// create Stars ///////////////////
328 687263cc Leszek Koltunski
    if( mStarTexture==null ) mStarTexture = new DistortedTexture();
329 f6d884d5 Leszek Koltunski
    mStarTexture.setTexture(bitmapStar);
330 bc0a685b Leszek Koltunski
    }
331 427ab7bf Leszek Koltunski
 
332
///////////////////////////////////////////////////////////////////////////////////////////////////
333
334 bc0a685b Leszek Koltunski
  private void displayJustified(String str, int x, int y, int length, Canvas c, Paint paint)
335
    { 
336
    int len       = str.length();
337
    int numspaces = retNumSpaces(str);
338 427ab7bf Leszek Koltunski
    
339 bc0a685b Leszek Koltunski
    if( len>0 && str.charAt(len-1) == ' ' ) numspaces--;
340 427ab7bf Leszek Koltunski
341 bc0a685b Leszek Koltunski
    float left=x,w = (numspaces>0 ? (length-paint.measureText(str))/numspaces : 0);
342
    String tmp;
343
    int begin,end=0;
344 427ab7bf Leszek Koltunski
345 bc0a685b Leszek Koltunski
    while( end<len )
346
      {
347
      begin=end;
348
      end = str.indexOf(' ', begin)+1;
349
      if( end<=0 ) end = len;
350 427ab7bf Leszek Koltunski
351 bc0a685b Leszek Koltunski
      tmp = str.substring(begin,end);
352
      c.drawText( tmp, left, y, paint);
353
      left+= (paint.measureText(tmp)+w);
354
      }  
355
    }
356 427ab7bf Leszek Koltunski
357
///////////////////////////////////////////////////////////////////////////////////////////////////
358
   
359 bc0a685b Leszek Koltunski
  private int retNumSpaces(String str)
360
    {
361
    int begin=0, ret=0;
362 427ab7bf Leszek Koltunski
363 bc0a685b Leszek Koltunski
    while( true )
364
      {
365
      begin = str.indexOf(' ', begin) +1;
366 427ab7bf Leszek Koltunski
367 bc0a685b Leszek Koltunski
      if( begin>0 ) ret++;
368
      else break;
369 427ab7bf Leszek Koltunski
      }
370 bc0a685b Leszek Koltunski
371
    return ret;
372
    }
373 427ab7bf Leszek Koltunski
    
374
///////////////////////////////////////////////////////////////////////////////////////////////////
375
376 8d5a8e06 Leszek Koltunski
  public void effectFinished(final long effectID)
377 bc0a685b Leszek Koltunski
    {
378 8d5a8e06 Leszek Koltunski
    if( effectID == alphaEffectID )
379 427ab7bf Leszek Koltunski
      {
380 8d5a8e06 Leszek Koltunski
      mScreen.detach(mGFFAEffects);
381
      mGFFATexture.markForDeletion();
382 611ea379 Leszek Koltunski
383 e8e54972 Leszek Koltunski
      int screenW = mScreen.getWidth();
384 5a683295 Leszek Koltunski
      int initSize= (int)(3.00f*screenW);
385
      int finaSize= (int)(0.01f*screenW);
386 427ab7bf Leszek Koltunski
      
387 8d5a8e06 Leszek Koltunski
      Dynamic3D di = new Dynamic3D(10000,0.5f);
388 5a683295 Leszek Koltunski
      di.add(new Static3D(initSize,initSize/mLogoRatio,1));
389
      di.add(new Static3D(finaSize,finaSize/mLogoRatio,1));
390 8d5a8e06 Leszek Koltunski
      MatrixEffectScale scale = new MatrixEffectScale(di);
391
      scale.notifyWhenFinished(this);
392
      scaleEffectID = scale.getID();
393 dae661e9 Leszek Koltunski
      mLogoEffects.apply( scale );
394 5a683295 Leszek Koltunski
      mScreen.attach(mLogoTexture, mLogoEffects, mQuad);
395 8d5a8e06 Leszek Koltunski
      }
396
    else if( effectID == scaleEffectID )
397
      {
398
      mScreen.detach(mLogoEffects);
399
      mLogoTexture.markForDeletion();
400 5a683295 Leszek Koltunski
401
      float scale = mCrawlBackgroundW/CRAWL_WIDTH;
402
403
      mCrawlBackgroundEffects.apply( new MatrixEffectScale( new Static3D(mCrawlBackgroundW, mCrawlBackgroundH, 1) ) );
404
      mCrawlBackgroundEffects.apply( new MatrixEffectRotate(new Static1D(CRAWL_ANGLE), new Static3D(1,0,0), new Static3D(0,-mCrawlBackgroundH/2,0)) );
405
      mCrawlBackgroundEffects.apply( new MatrixEffectMove(new Static3D( 0, (mCrawlBackgroundH-mHeight)/2, 0)) );
406
407
      final float transpDist = 5;
408
      Static3D center = new Static3D( 0, transpDist-0.5f, 0 );
409
      Static3D region = new Static3D( transpDist, transpDist, transpDist );
410 8d5a8e06 Leszek Koltunski
      mCrawlBackgroundEffects.apply( new FragmentEffectAlpha(new Static1D(1-transpDist*0.6f), center, region, true) );
411
412
      Dynamic3D di = new Dynamic3D(70000,0.5f);
413 5a683295 Leszek Koltunski
      di.add(new Static3D(0, -(scale*CRAWL_HEIGHT+mCrawlBackgroundH)/2, 0));
414
      di.add(new Static3D(0, +(scale*CRAWL_HEIGHT+mCrawlBackgroundH)/2, 0));
415 8d5a8e06 Leszek Koltunski
      MatrixEffectMove move = new MatrixEffectMove(di);
416
      move.notifyWhenFinished(this);
417
      moveEffectID = move.getID();
418
419 5a683295 Leszek Koltunski
      mCrawlEffects.apply( new MatrixEffectScale(new Static3D(scale*CRAWL_WIDTH,scale*CRAWL_HEIGHT,1)) );
420 dae661e9 Leszek Koltunski
      mCrawlEffects.apply( move );
421
422 5a683295 Leszek Koltunski
      mBackground = mScreen.attach(mCrawlBackgroundTexture, mCrawlBackgroundEffects, mQuad);
423
      mBackground.resizeFBO(mCrawlBackgroundW,mCrawlBackgroundH);
424
      mBackground.attach(mCrawlTexture, mCrawlEffects, mQuad);
425 8d5a8e06 Leszek Koltunski
      mBackground.glDisable(GLES31.GL_DEPTH_TEST);
426
      mBackground.glDepthMask(false);
427
      }
428 e8e54972 Leszek Koltunski
    else if( effectID == moveEffectID )
429 8d5a8e06 Leszek Koltunski
      {
430
      mScreen.detach(mBackground);
431
      mBackground.detach(mCrawlEffects);
432
      mCrawlTexture.markForDeletion();
433
      mCrawlBackgroundEffects.abortAllEffects();
434
      mCrawlBackgroundTexture.markForDeletion();
435 427ab7bf Leszek Koltunski
      }
436 bc0a685b Leszek Koltunski
    }
437
  }