Project

General

Profile

« Previous | Next » 

Revision b9798977

Added by Leszek Koltunski about 7 years ago

Advances in Multiblur - breaks BLUR for now.

View differences:

src/main/java/org/distorted/library/DistortedEffects.java
95 95
  private static long mNextID =0;
96 96
  private long mID;
97 97

  
98
  private static DistortedFramebuffer mBufferFBO = new DistortedFramebuffer(true,DistortedSurface.TYPE_SYST,1,1);
99

  
100 98
  private EffectQueueMatrix      mM;
101 99
  private EffectQueueFragment    mF;
102 100
  private EffectQueueVertex      mV;
......
281 279
    GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4);
282 280
    }
283 281

  
282
///////////////////////////////////////////////////////////////////////////////////////////////////
283

  
284
  DistortedFramebuffer getPostprocessingBuffer()
285
    {
286
    return mP.mNumEffects==0 ? null : mP.mMainBuffer;
287
    }
288

  
284 289
///////////////////////////////////////////////////////////////////////////////////////////////////
285 290

  
286 291
  void drawPriv(float halfW, float halfH, MeshObject mesh, DistortedOutputSurface surface, long currTime)
......
293 298
    float halfZ = halfW*mesh.zFactor;
294 299
    GLES30.glViewport(0, 0, surface.mWidth, surface.mHeight);
295 300

  
296
    if( mP.mNumEffects==0 )
297
      {
298
      mMainProgram.useProgram();
299
      GLES30.glUniform1i(mMainTextureH, 0);
300
      surface.setAsOutput();
301
      mM.send(surface,halfW,halfH,halfZ);
302
      mV.send(halfW,halfH,halfZ);
303
      mF.send(halfW,halfH);
304
      GLES30.glVertexAttribPointer(mMainProgram.mAttribute[0], POSITION_DATA_SIZE, GLES30.GL_FLOAT, false, 0, mesh.mMeshPositions);
305
      GLES30.glVertexAttribPointer(mMainProgram.mAttribute[1], NORMAL_DATA_SIZE  , GLES30.GL_FLOAT, false, 0, mesh.mMeshNormals);
306
      GLES30.glVertexAttribPointer(mMainProgram.mAttribute[2], TEX_DATA_SIZE     , GLES30.GL_FLOAT, false, 0, mesh.mMeshTexture);
307
      GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, mesh.dataLength);
308
      }
309
    else
310
      {
311
      if( mV.mNumEffects==0 && mF.mNumEffects==0 && (mesh instanceof MeshFlat) && mM.canUseShortcut() )
312
        {
313
        mM.constructMatrices(surface,halfW,halfH);
314
        mP.render(2*halfW, 2*halfH, mM.getMVP(), surface);
315
        }
316
      else
317
        {
318
        mMainProgram.useProgram();
319
        GLES30.glUniform1i(mMainTextureH, 0);
320
        mBufferFBO.resizeFast(surface.mWidth, surface.mHeight);
321
        mBufferFBO.setAsOutput();
322
        GLES30.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
323
        GLES30.glClear( GLES30.GL_DEPTH_BUFFER_BIT | GLES30.GL_COLOR_BUFFER_BIT);
324
        mM.send(mBufferFBO,halfW,halfH,halfZ);
325
        mV.send(halfW,halfH,halfZ);
326
        mF.send(halfW,halfH);
327
        GLES30.glVertexAttribPointer(mMainProgram.mAttribute[0], POSITION_DATA_SIZE, GLES30.GL_FLOAT, false, 0, mesh.mMeshPositions);
328
        GLES30.glVertexAttribPointer(mMainProgram.mAttribute[1], NORMAL_DATA_SIZE  , GLES30.GL_FLOAT, false, 0, mesh.mMeshNormals);
329
        GLES30.glVertexAttribPointer(mMainProgram.mAttribute[2], TEX_DATA_SIZE     , GLES30.GL_FLOAT, false, 0, mesh.mMeshTexture);
330
        GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, mesh.dataLength);
331

  
332
        Matrix.setIdentityM(mTmpMatrix, 0);
333
        Matrix.translateM(mTmpMatrix, 0, 0, 0, -surface.mDistance);
334
        Matrix.multiplyMM(mMVPMatrix, 0, surface.mProjectionMatrix, 0, mTmpMatrix, 0);
335

  
336
        mBufferFBO.setAsInput();
337
        mP.render(surface.mWidth, surface.mHeight, mMVPMatrix, surface);
338
        }
339
      }
301
    mMainProgram.useProgram();
302
    GLES30.glUniform1i(mMainTextureH, 0);
303
    surface.setAsOutput();
304
    mM.send(surface,halfW,halfH,halfZ);
305
    mV.send(halfW,halfH,halfZ);
306
    mF.send(halfW,halfH);
307
    GLES30.glVertexAttribPointer(mMainProgram.mAttribute[0], POSITION_DATA_SIZE, GLES30.GL_FLOAT, false, 0, mesh.mMeshPositions);
308
    GLES30.glVertexAttribPointer(mMainProgram.mAttribute[1], NORMAL_DATA_SIZE  , GLES30.GL_FLOAT, false, 0, mesh.mMeshNormals);
309
    GLES30.glVertexAttribPointer(mMainProgram.mAttribute[2], TEX_DATA_SIZE     , GLES30.GL_FLOAT, false, 0, mesh.mMeshTexture);
310
    GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, mesh.dataLength);
340 311

  
341 312
    /// DEBUG ONLY //////
342 313
    // displayBoundingRect(halfInputW, halfInputH, halfZ, df, mM.getMVP(), mesh.getBoundingVertices() );

Also available in: Unified diff