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/PostprocessEffectGlow.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;
......
39 38
  private Data1D mGlowRadius;
40 39
  private Data4D mColor;
41 40

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

  
192 191
    int offset = radius + radius*radius/4;
193 192
    radius = (radius+1)/2;
194
    GLES31.glViewport(0, 0, (int)w, (int)h);
193
    GLES30.glViewport(0, 0, (int)w, (int)h);
195 194

  
196 195
    // horizontal blur
197 196
    for(int i=0; i<=radius; i++) mOffsets[i] = offsetsCache[offset+i]*offsetCorrW;
......
200 199
    buffer.bindForOutput(1);
201 200
    buffer.setAsInput(0);
202 201

  
203
    GLES31.glColorMask(true,true,true,true);
204
    GLES31.glClearColor(1.0f,1.0f,1.0f,0.0f);
205
    GLES31.glClear(GLES31.GL_COLOR_BUFFER_BIT);
202
    GLES30.glColorMask(true,true,true,true);
203
    GLES30.glClearColor(1.0f,1.0f,1.0f,0.0f);
204
    GLES30.glClear(GLES30.GL_COLOR_BUFFER_BIT);
206 205

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

  
217 216
    // vertical blur
218 217
    for(int i=0; i<=radius; i++) mOffsets[i] = offsetsCache[offset+i]*offsetCorrH;
......
221 220
    buffer.bindForOutput(0);
222 221
    buffer.setAsInput(1);
223 222

  
224
    GLES31.glClear(GLES31.GL_COLOR_BUFFER_BIT);
223
    GLES30.glClear(GLES30.GL_COLOR_BUFFER_BIT);
225 224

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

  
236 235
    InternalRenderState.unuseStencilMark();
237 236

  
......
248 247
    {
249 248
    final String glowVertex =
250 249

  
251
        DistortedLibrary.GLSL_VERSION   +
252 250
            "precision lowp float;  \n"+
253 251
            "in vec2 a_Position;    \n"+
254 252
            "in vec2 a_TexCoord;    \n"+
......
264 262

  
265 263
    final String glowFragment1 =
266 264

  
267
        DistortedLibrary.GLSL_VERSION               +
268 265
            "#define MAX_BLUR "+MAX_HALO+      "\n"+
269 266
            "precision lowp float;              \n"+
270 267
            "in vec2 v_TexCoord;                \n"+
......
287 284

  
288 285
    final String glowFragment2 =
289 286

  
290
        DistortedLibrary.GLSL_VERSION               +
291 287
            "#define MAX_BLUR "+MAX_HALO+      "\n"+
292 288
            "precision lowp float;              \n"+
293 289
            "in vec2 v_TexCoord;                \n"+

Also available in: Unified diff