Project

General

Profile

« Previous | Next » 

Revision b7074bc6

Added by Leszek Koltunski about 4 years ago

Lower requirements - now only OpenGL ES 3.0 is required; if running on such platform, OIT part of the API ( which is the only one which actually requires 3.1) is switched off.

View differences:

src/main/java/org/distorted/library/effect/PostprocessEffectBlur.java
19 19

  
20 20
package org.distorted.library.effect;
21 21

  
22
import android.opengl.GLES31;
22
import android.opengl.GLES30;
23 23

  
24
import org.distorted.library.main.DistortedLibrary;
25 24
import org.distorted.library.main.DistortedFramebuffer;
26 25
import org.distorted.library.main.InternalRenderState;
27 26
import org.distorted.library.program.DistortedProgram;
......
37 36

  
38 37
  private Data1D mBlurRadius;
39 38

  
40
  private static final float GAUSSIAN[] =   // G(0.00), G(0.03), G(0.06), ..., G(3.00), 0
39
  private static final float[] GAUSSIAN =   // G(0.00), G(0.03), G(0.06), ..., G(3.00), 0
41 40
    {                                       // where G(x)= (1/(sqrt(2*PI))) * e^(-(x^2)/2). The last 0 terminates.
42 41
    0.398948f, 0.398769f, 0.398231f, 0.397336f, 0.396086f, 0.394485f, 0.392537f, 0.390247f, 0.387622f, 0.384668f,
43 42
    0.381393f, 0.377806f, 0.373916f, 0.369733f, 0.365268f, 0.360532f, 0.355538f, 0.350297f, 0.344823f, 0.339129f,
......
188 187

  
189 188
    int offset = radius + radius*radius/4;
190 189
    radius = (radius+1)/2;
191
    GLES31.glViewport(0, 0, (int)w, (int)h);
190
    GLES30.glViewport(0, 0, (int)w, (int)h);
192 191

  
193 192
    // horizontal blur
194 193
    for(int i=0; i<=radius; i++) mOffsets[i] = offsetsCache[offset+i]*offsetCorrW;
......
197 196
    buffer.bindForOutput(1);
198 197
    buffer.setAsInput(0);
199 198

  
200
    GLES31.glColorMask(true,true,true,true);
201
    GLES31.glClearColor(1.0f,1.0f,1.0f,0.0f);
202
    GLES31.glClear(GLES31.GL_COLOR_BUFFER_BIT);
199
    GLES30.glColorMask(true,true,true,true);
200
    GLES30.glClearColor(1.0f,1.0f,1.0f,0.0f);
201
    GLES30.glClear(GLES30.GL_COLOR_BUFFER_BIT);
203 202

  
204
    GLES31.glUniform1f ( mProgram1.mUniform[0] , n );
205
    GLES31.glUniform2f ( mProgram1.mUniform[1] , corrW, corrH );
206
    GLES31.glUniform1i ( mProgram1.mUniform[2] , 0 );
207
    GLES31.glUniform1fv( mProgram1.mUniform[3] , radius+1, mOffsets,0);
208
    GLES31.glUniform1fv( mProgram1.mUniform[4] , radius+1, weightsCache,offset);
209
    GLES31.glUniform1i ( mProgram1.mUniform[5] , radius);
210
    GLES31.glVertexAttribPointer(mProgram1.mAttribute[0], POS_DATA_SIZE, GLES31.GL_FLOAT, false, 0, mQuadPositions);
211
    GLES31.glVertexAttribPointer(mProgram1.mAttribute[1], TEX_DATA_SIZE, GLES31.GL_FLOAT, false, 0, mQuadTexture);
212
    GLES31.glDrawArrays(GLES31.GL_TRIANGLE_STRIP, 0, 4);
203
    GLES30.glUniform1f ( mProgram1.mUniform[0] , n );
204
    GLES30.glUniform2f ( mProgram1.mUniform[1] , corrW, corrH );
205
    GLES30.glUniform1i ( mProgram1.mUniform[2] , 0 );
206
    GLES30.glUniform1fv( mProgram1.mUniform[3] , radius+1, mOffsets,0);
207
    GLES30.glUniform1fv( mProgram1.mUniform[4] , radius+1, weightsCache,offset);
208
    GLES30.glUniform1i ( mProgram1.mUniform[5] , radius);
209
    GLES30.glVertexAttribPointer(mProgram1.mAttribute[0], POS_DATA_SIZE, GLES30.GL_FLOAT, false, 0, mQuadPositions);
210
    GLES30.glVertexAttribPointer(mProgram1.mAttribute[1], TEX_DATA_SIZE, GLES30.GL_FLOAT, false, 0, mQuadTexture);
211
    GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4);
213 212

  
214 213
    // vertical blur
215 214
    for(int i=0; i<=radius; i++) mOffsets[i] = offsetsCache[offset+i]*offsetCorrH;
......
218 217
    buffer.bindForOutput(0);
219 218
    buffer.setAsInput(1);
220 219

  
221
    GLES31.glClear(GLES31.GL_COLOR_BUFFER_BIT);
220
    GLES30.glClear(GLES30.GL_COLOR_BUFFER_BIT);
222 221

  
223
    GLES31.glUniform1f ( mProgram2.mUniform[0] , n );
224
    GLES31.glUniform2f ( mProgram2.mUniform[1] , corrW, corrH );
225
    GLES31.glUniform1i ( mProgram2.mUniform[2] , 0 );
226
    GLES31.glUniform1fv( mProgram2.mUniform[3] , radius+1, mOffsets,0);
227
    GLES31.glUniform1fv( mProgram2.mUniform[4] , radius+1, weightsCache,offset);
228
    GLES31.glUniform1i ( mProgram2.mUniform[5] , radius);
229
    GLES31.glVertexAttribPointer(mProgram2.mAttribute[0], POS_DATA_SIZE, GLES31.GL_FLOAT, false, 0, mQuadPositions);
230
    GLES31.glVertexAttribPointer(mProgram2.mAttribute[1], TEX_DATA_SIZE, GLES31.GL_FLOAT, false, 0, mQuadTexture);
231
    GLES31.glDrawArrays(GLES31.GL_TRIANGLE_STRIP, 0, 4);
222
    GLES30.glUniform1f ( mProgram2.mUniform[0] , n );
223
    GLES30.glUniform2f ( mProgram2.mUniform[1] , corrW, corrH );
224
    GLES30.glUniform1i ( mProgram2.mUniform[2] , 0 );
225
    GLES30.glUniform1fv( mProgram2.mUniform[3] , radius+1, mOffsets,0);
226
    GLES30.glUniform1fv( mProgram2.mUniform[4] , radius+1, weightsCache,offset);
227
    GLES30.glUniform1i ( mProgram2.mUniform[5] , radius);
228
    GLES30.glVertexAttribPointer(mProgram2.mAttribute[0], POS_DATA_SIZE, GLES30.GL_FLOAT, false, 0, mQuadPositions);
229
    GLES30.glVertexAttribPointer(mProgram2.mAttribute[1], TEX_DATA_SIZE, GLES30.GL_FLOAT, false, 0, mQuadTexture);
230
    GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4);
232 231

  
233 232
    InternalRenderState.unuseStencilMark();
234 233

  
......
245 244
    {
246 245
    final String blurVertex =
247 246

  
248
        DistortedLibrary.GLSL_VERSION   +
249 247
      "precision lowp float;  \n"+
250 248
      "in vec2 a_Position;    \n"+
251 249
      "in vec2 a_TexCoord;    \n"+
......
261 259

  
262 260
    final String blurFragment1 =
263 261

  
264
        DistortedLibrary.GLSL_VERSION               +
265 262
      "#define MAX_BLUR "+MAX_HALO+      "\n"+
266 263
      "precision lowp float;              \n"+
267 264
      "in vec2 v_TexCoord;                \n"+
......
284 281

  
285 282
    final String blurFragment2 =
286 283

  
287
        DistortedLibrary.GLSL_VERSION               +
288 284
      "#define MAX_BLUR "+MAX_HALO+      "\n"+
289 285
      "precision lowp float;              \n"+
290 286
      "in vec2 v_TexCoord;                \n"+

Also available in: Unified diff