Revision 0f011027
Added by Leszek Koltunski almost 7 years ago
src/main/java/org/distorted/library/EffectQueuePostprocess.java | ||
---|---|---|
271 | 271 |
{ |
272 | 272 |
compute(time); |
273 | 273 |
|
274 |
DistortedFramebuffer buffer1 = surface.mBuffer1[mQualityLevel];
|
|
275 |
DistortedFramebuffer buffer2 = surface.mBuffer2[mQualityLevel];
|
|
274 |
DistortedFramebuffer buffer = surface.mBuffer[mQualityLevel];
|
|
275 |
GLES30.glBindFramebuffer(GLES30.GL_FRAMEBUFFER, buffer.mFBOH[0]);
|
|
276 | 276 |
|
277 |
float w1 = buffer1.mWidth;
|
|
278 |
float h1 = buffer1.mHeight;
|
|
277 |
float w1 = buffer.mWidth; |
|
278 |
float h1 = buffer.mHeight; |
|
279 | 279 |
float w2 = surface.mWidth; |
280 | 280 |
float h2 = surface.mHeight; |
281 | 281 |
|
... | ... | |
289 | 289 |
// horizontal blur |
290 | 290 |
GLES30.glViewport(0, 0, (int)w1, (int)h1); |
291 | 291 |
mBlur1Program.useProgram(); |
292 |
buffer1.setAsInput(); |
|
293 |
buffer2.setAsOutput(); |
|
292 |
GLES30.glFramebufferTexture2D(GLES30.GL_FRAMEBUFFER, GLES30.GL_COLOR_ATTACHMENT0, GLES30.GL_TEXTURE_2D, buffer.mColorH[1], 0); |
|
293 |
GLES30.glActiveTexture(GLES30.GL_TEXTURE0); |
|
294 |
GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, buffer.mColorH[0]); |
|
294 | 295 |
|
295 | 296 |
GLES30.glUniform1fv( mWeights1H, radius+1, weightsCache,offset); |
296 | 297 |
GLES30.glUniform1i( mRadius1H, radius); |
... | ... | |
304 | 305 |
DistortedRenderState.useStencilMark(); |
305 | 306 |
GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4); |
306 | 307 |
DistortedRenderState.unuseStencilMark(); |
308 |
GLES30.glActiveTexture(GLES30.GL_TEXTURE0); |
|
309 |
GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, 0); |
|
307 | 310 |
|
308 | 311 |
// vertical blur |
309 | 312 |
mBlur2Program.useProgram(); |
310 |
buffer2.setAsInput(); |
|
311 |
buffer1.setAsOutput(); |
|
313 |
GLES30.glFramebufferTexture2D(GLES30.GL_FRAMEBUFFER, GLES30.GL_COLOR_ATTACHMENT0, GLES30.GL_TEXTURE_2D, buffer.mColorH[0], 0); |
|
314 |
GLES30.glActiveTexture(GLES30.GL_TEXTURE0); |
|
315 |
GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, buffer.mColorH[1]); |
|
312 | 316 |
|
313 | 317 |
GLES30.glColorMask(true,true,true,true); |
314 | 318 |
GLES30.glClearColor(0.0f,0.0f,0.0f,0.0f); |
... | ... | |
323 | 327 |
GLES30.glVertexAttribPointer(mBlur2Program.mAttribute[0], POS_DATA_SIZE, GLES30.GL_FLOAT, false, 0, mQuadPositions); |
324 | 328 |
GLES30.glVertexAttribPointer(mBlur2Program.mAttribute[1], TEX_DATA_SIZE, GLES30.GL_FLOAT, false, 0, mQuadTexture); |
325 | 329 |
|
326 |
GLES30.glFramebufferTexture2D(GLES30.GL_FRAMEBUFFER, GLES30.GL_DEPTH_STENCIL_ATTACHMENT, GLES30.GL_TEXTURE_2D, buffer2.mDepthStencilH[0], 0); |
|
327 | 330 |
DistortedRenderState.useStencilMark(); |
328 | 331 |
GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4); |
329 | 332 |
DistortedRenderState.unuseStencilMark(); |
330 |
GLES30.glFramebufferTexture2D(GLES30.GL_FRAMEBUFFER, GLES30.GL_DEPTH_STENCIL_ATTACHMENT, GLES30.GL_TEXTURE_2D, buffer1.mDepthStencilH[0], 0); |
|
333 |
GLES30.glActiveTexture(GLES30.GL_TEXTURE0); |
|
334 |
GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, 0); |
|
331 | 335 |
|
332 | 336 |
// blit the results with DEPTH to surface. |
333 | 337 |
GLES30.glViewport(0, 0, (int)w2, (int)h2); |
334 |
buffer1.setAsInput(); |
|
335 |
buffer2.setAsDepth(); |
|
336 | 338 |
surface.setAsOutput(time); |
339 |
GLES30.glActiveTexture(GLES30.GL_TEXTURE0); |
|
340 |
GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, buffer.mColorH[0]); |
|
341 |
GLES30.glActiveTexture(GLES30.GL_TEXTURE1); |
|
342 |
GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, buffer.mDepthStencilH[0]); |
|
343 |
|
|
344 |
GLES30.glDisable(GLES30.GL_STENCIL_TEST); |
|
345 |
GLES30.glStencilMask(0x00); |
|
346 |
|
|
337 | 347 |
DistortedEffects.blitDepthPriv(surface); |
348 |
GLES30.glActiveTexture(GLES30.GL_TEXTURE0); |
|
349 |
GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, 0); |
|
350 |
GLES30.glActiveTexture(GLES30.GL_TEXTURE1); |
|
351 |
GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, 0); |
|
338 | 352 |
|
339 | 353 |
// after each postprocess, clear buffers |
340 | 354 |
GLES30.glStencilMask(0xff); |
... | ... | |
343 | 357 |
GLES30.glClearColor(0.0f,0.0f,0.0f,0.0f); |
344 | 358 |
GLES30.glClearDepthf(1.0f); |
345 | 359 |
GLES30.glClearStencil(0); |
346 |
buffer1.setAsOutput(); |
|
347 |
GLES30.glClear(GLES30.GL_COLOR_BUFFER_BIT|GLES30.GL_DEPTH_BUFFER_BIT|GLES30.GL_STENCIL_BUFFER_BIT);
|
|
348 |
buffer2.setAsOutput();
|
|
360 |
|
|
361 |
buffer.setAsOutput();
|
|
362 |
GLES30.glFramebufferTexture2D(GLES30.GL_FRAMEBUFFER, GLES30.GL_COLOR_ATTACHMENT0, GLES30.GL_TEXTURE_2D, buffer.mColorH[1], 0);
|
|
349 | 363 |
GLES30.glClear(GLES30.GL_COLOR_BUFFER_BIT|GLES30.GL_DEPTH_BUFFER_BIT|GLES30.GL_STENCIL_BUFFER_BIT); |
364 |
GLES30.glFramebufferTexture2D(GLES30.GL_FRAMEBUFFER, GLES30.GL_COLOR_ATTACHMENT0, GLES30.GL_TEXTURE_2D, buffer.mColorH[0], 0); |
|
365 |
GLES30.glClear(GLES30.GL_COLOR_BUFFER_BIT); |
|
350 | 366 |
} |
351 | 367 |
|
352 | 368 |
return mNumEffects; |
Also available in: Unified diff
Major speedup, BLUR fully optimized now.
Multiblur app, worst case (all 8 cubes blurred with max radius, HIGHEST quality: Nexus5X: 46.7 FPS, Nexus 4: 29.7 FPS.