| 299 |
299 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
| 300 |
300 |
// two phases: 1. collapse the SSBO 2. blend the ssbo's color
|
| 301 |
301 |
|
| 302 |
|
private int oitRender(long currTime)
|
|
302 |
private int oitRender(long currTime, int fbo)
|
| 303 |
303 |
{
|
| 304 |
304 |
float corrW = getWidthCorrection();
|
| 305 |
305 |
float corrH = getHeightCorrection();
|
| ... | ... | |
| 307 |
307 |
// Do the Collapse Pass only if we do have a Depth attachment.
|
| 308 |
308 |
// Otherwise there's no point (in fact we then would create a feedback loop!)
|
| 309 |
309 |
|
| 310 |
|
if( mDepthStencilH[0] != 0 )
|
|
310 |
if( mDepthStencilH[fbo] != 0 )
|
| 311 |
311 |
{
|
| 312 |
312 |
GLES31.glBindFramebuffer(GLES31.GL_FRAMEBUFFER, 0);
|
| 313 |
313 |
GLES31.glActiveTexture(GLES31.GL_TEXTURE1);
|
| 314 |
|
GLES31.glBindTexture(GLES31.GL_TEXTURE_2D, mDepthStencilH[0]);
|
|
314 |
GLES31.glBindTexture(GLES31.GL_TEXTURE_2D, mDepthStencilH[fbo]);
|
| 315 |
315 |
DistortedRenderState.switchOffColorDepthStencil();
|
| 316 |
316 |
DistortedEffects.oitCollapse(this, corrW, corrH);
|
| 317 |
317 |
GLES31.glBindTexture(GLES31.GL_TEXTURE_2D, 0);
|
| 318 |
318 |
}
|
| 319 |
319 |
|
| 320 |
|
setAsOutput(currTime);
|
|
320 |
setAsOutputFBO(currTime,fbo);
|
| 321 |
321 |
DistortedRenderState.switchColorDepthOnStencilOff();
|
| 322 |
322 |
DistortedEffects.oitRender(this, corrW, corrH);
|
| 323 |
323 |
DistortedRenderState.restoreColorDepthStencil();
|
| ... | ... | |
| 341 |
341 |
GLES31.glClear(GLES31.GL_COLOR_BUFFER_BIT|GLES31.GL_DEPTH_BUFFER_BIT|GLES31.GL_STENCIL_BUFFER_BIT);
|
| 342 |
342 |
GLES31.glFramebufferTexture2D(GLES31.GL_FRAMEBUFFER, GLES31.GL_COLOR_ATTACHMENT0, GLES31.GL_TEXTURE_2D, buffer.mColorH[2*fbo ], 0);
|
| 343 |
343 |
GLES31.glClear(GLES31.GL_COLOR_BUFFER_BIT);
|
| 344 |
|
|
| 345 |
|
for(int i=buffer.mNumColors-2; i>=0; i--)
|
| 346 |
|
{
|
| 347 |
|
GLES31.glFramebufferTexture2D(GLES31.GL_FRAMEBUFFER, GLES31.GL_COLOR_ATTACHMENT0, GLES31.GL_TEXTURE_2D, buffer.mColorH[i], 0);
|
| 348 |
|
GLES31.glClear(GLES31.GL_COLOR_BUFFER_BIT);
|
| 349 |
|
}
|
| 350 |
344 |
}
|
| 351 |
345 |
|
| 352 |
346 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
| ... | ... | |
| 430 |
424 |
numRenders += currQueue.postprocess(mBuffer,fbo);
|
| 431 |
425 |
numRenders += oitBuild(time,mBuffer[quality],fbo);
|
| 432 |
426 |
GLES31.glMemoryBarrier(GLES31.GL_SHADER_STORAGE_BARRIER_BIT|GLES31.GL_ATOMIC_COUNTER_BARRIER_BIT);
|
| 433 |
|
numRenders += oitRender(time); // merge the OIT linked list
|
|
427 |
numRenders += oitRender(time,fbo); // merge the OIT linked list
|
| 434 |
428 |
clearBuffer(mBuffer[quality],fbo);
|
| 435 |
429 |
}
|
| 436 |
430 |
} // end else (postprocessed child)
|
| ... | ... | |
| 473 |
467 |
|
| 474 |
468 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
| 475 |
469 |
|
| 476 |
|
private void setAsOutputFBO(long time, int fbo)
|
|
470 |
public void setAsOutputFBO(long time, int fbo)
|
| 477 |
471 |
{
|
| 478 |
472 |
if( fbo>=0 && fbo<mNumFBOs )
|
| 479 |
473 |
{
|
| ... | ... | |
| 609 |
603 |
* <p>
|
| 610 |
604 |
* This version does not attempt to clear anything.
|
| 611 |
605 |
*/
|
| 612 |
|
|
| 613 |
606 |
public void setAsOutput()
|
| 614 |
607 |
{
|
| 615 |
608 |
GLES31.glBindFramebuffer(GLES31.GL_FRAMEBUFFER, mFBOH[0]);
|
Port the Mali flash fix to the OIT branch.