Project

General

Profile

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

examples / src / main / java / org / distorted / examples / flatblur2 / FlatBlur2Renderer.java @ 99a80c08

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

    
22
import android.content.res.Resources;
23
import android.opengl.GLSurfaceView;
24

    
25
import org.distorted.library.effect.EffectQuality;
26
import org.distorted.library.effect.EffectType;
27
import org.distorted.library.effect.MatrixEffectRotate;
28
import org.distorted.library.effect.MatrixEffectScale;
29
import org.distorted.library.effect.PostprocessEffectGlow;
30
import org.distorted.library.main.DistortedEffects;
31
import org.distorted.library.main.DistortedLibrary;
32
import org.distorted.library.main.DistortedNode;
33
import org.distorted.library.main.DistortedScreen;
34
import org.distorted.library.main.DistortedTexture;
35
import org.distorted.library.mesh.MeshCubes;
36
import org.distorted.library.mesh.MeshQuad;
37

    
38
import org.distorted.library.message.EffectListener;
39
import org.distorted.library.type.Dynamic2D;
40
import org.distorted.library.type.Dynamic4D;
41
import org.distorted.library.type.Static1D;
42
import org.distorted.library.type.Static2D;
43
import org.distorted.library.type.Static3D;
44
import org.distorted.library.type.Static4D;
45

    
46
import javax.microedition.khronos.egl.EGLConfig;
47
import javax.microedition.khronos.opengles.GL10;
48

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

    
51
class FlatBlur2Renderer implements GLSurfaceView.Renderer, DistortedLibrary.ExceptionListener, ListenerOverlay, EffectListener
52
{
53
    private final GLSurfaceView mView;
54
    private final DistortedScreen mScreen;
55
    private Static3D mScale1, mScale2;
56
    private DistortedNode mNode;
57

    
58
///////////////////////////////////////////////////////////////////////////////////////////////////
59

    
60
    FlatBlur2Renderer(GLSurfaceView v)
61
      {
62
      mView = v;
63
      mScreen = new DistortedScreen();
64
      }
65

    
66
///////////////////////////////////////////////////////////////////////////////////////////////////
67

    
68
    public void onDrawFrame(GL10 glUnused) 
69
      {
70
      mScreen.render(System.currentTimeMillis());
71
      }
72

    
73
///////////////////////////////////////////////////////////////////////////////////////////////////
74

    
75
    public void onSurfaceChanged(GL10 glUnused, int width, int height)
76
      {
77
      float s = width*0.05f;
78
      mScale1.set(width,width,0);
79
      mScale2.set(s,s,s);
80
      mScreen.resize(width,height);
81
      }
82

    
83
///////////////////////////////////////////////////////////////////////////////////////////////////
84
    
85
    public void onSurfaceCreated(GL10 glUnused, EGLConfig config) 
86
      {
87
      DistortedTexture surface1 = new DistortedTexture();
88
      surface1.setColorARGB(0xffff0000);
89
      MeshQuad mesh1 = new MeshQuad();
90
      DistortedEffects effects1 = new DistortedEffects();
91

    
92
      mScale1 = new Static3D(1,1,1);
93
      MatrixEffectScale scale1 = new MatrixEffectScale(mScale1);
94
      effects1.apply(scale1);
95
      mNode = new DistortedNode(surface1,effects1,mesh1);
96
      mScreen.attach(mNode);
97

    
98
      DistortedTexture surface2 = new DistortedTexture();
99
      surface2.setColorARGB(0xff0000ff);
100
      MeshCubes mesh2 = new MeshCubes(2,2,2);
101
      DistortedEffects effects2 = new DistortedEffects();
102

    
103
      mScale2 = new Static3D(1,1,1);
104
      MatrixEffectScale scale2 = new MatrixEffectScale(mScale2);
105
      effects2.apply(scale2);
106
      Static1D angle = new Static1D(30);
107
      float SQ3 = (float)Math.sqrt(3);
108
      Static3D axis = new Static3D(SQ3/3,SQ3/3,SQ3/3);
109
      Static3D center = new Static3D(0,0,0);
110
      MatrixEffectRotate rot = new MatrixEffectRotate(angle,axis,center);
111
      effects2.apply(rot);
112
      DistortedNode node2 = new DistortedNode(surface2,effects2,mesh2);
113
      mNode.attach(node2);
114

    
115
      OverlayStars.enableEffects();
116
      DistortedLibrary.onSurfaceCreated( mView.getContext(), this);
117
      }
118

    
119
///////////////////////////////////////////////////////////////////////////////////////////////////
120

    
121
    public void distortedException(Exception ex)
122
      {
123
      android.util.Log.e("FlatBlur2", ex.getMessage() );
124
      }
125

    
126
///////////////////////////////////////////////////////////////////////////////////////////////////
127

    
128
    public void button1()
129
      {
130
      OverlayStars stars = new OverlayStars();
131
      Resources res = mView.getResources();
132
      DataStars data  = new DataStars(10,5,res);
133
      stars.startOverlay(mScreen,this,data);
134
      }
135

    
136
///////////////////////////////////////////////////////////////////////////////////////////////////
137

    
138
    public void button2()
139
      {
140
      PostprocessEffectGlow glow = constructGlow();
141
      DistortedEffects effects = mNode.getEffects();
142
      effects.apply(glow);
143
      }
144

    
145
///////////////////////////////////////////////////////////////////////////////////////////////////
146

    
147
   private PostprocessEffectGlow constructGlow()
148
      {
149
      final int DUR_GLO = 3000;
150
      Dynamic2D haloRadius = new Dynamic2D(DUR_GLO,0.5f);
151
      Static2D point20 = new Static2D( 0, 0);
152
      Static2D point21 = new Static2D(15,50);
153
      Dynamic4D color = new Dynamic4D(DUR_GLO, 0.5f);
154
      Static4D point40 = new Static4D(1,1,1,0.0f);
155
      Static4D point41 = new Static4D(1,1,1,0.8f);
156

    
157
      haloRadius.add(point20);
158
      haloRadius.add(point21);
159
      haloRadius.add(point20);
160
      color.add(point40);
161
      color.add(point41);
162
      color.add(point40);
163

    
164
      PostprocessEffectGlow glow = new PostprocessEffectGlow(haloRadius,color);
165
      glow.setQuality(EffectQuality.MEDIUM);
166
      glow.notifyWhenFinished(this);
167
      return glow;
168
      }
169

    
170
///////////////////////////////////////////////////////////////////////////////////////////////////
171

    
172
    public void overlayFinished(long id)
173
      {
174

    
175
      }
176

    
177
///////////////////////////////////////////////////////////////////////////////////////////////////
178

    
179
    public void effectFinished(long id)
180
      {
181
      DistortedEffects effects = mNode.getEffects();
182
      effects.abortByType(EffectType.POSTPROCESS);
183
      }
184
}
(4-4/8)