Revision f482efa3
Added by Leszek Koltunski over 5 years ago
| src/main/java/org/distorted/library/main/DistortedLibrary.java | ||
|---|---|---|
| 460 | 460 |
|
| 461 | 461 |
static void drawPriv(DistortedEffects effects, MeshBase mesh, InternalOutputSurface surface, long currTime) |
| 462 | 462 |
{
|
| 463 |
EffectQueue[] queues = effects.getQueues(); |
|
| 463 |
if( mMainOITProgram!=null ) |
|
| 464 |
{
|
|
| 465 |
EffectQueue[] queues = effects.getQueues(); |
|
| 464 | 466 |
|
| 465 |
EffectQueue.compute(queues, currTime); |
|
| 466 |
GLES30.glViewport(0, 0, surface.mWidth, surface.mHeight ); |
|
| 467 |
EffectQueue.compute(queues, currTime);
|
|
| 468 |
GLES30.glViewport(0, 0, surface.mWidth, surface.mHeight );
|
|
| 467 | 469 |
|
| 468 |
DistortedLibrary.mMainProgram.useProgram();
|
|
| 469 |
GLES30.glUniform1i(DistortedLibrary.mMainTextureH, 0); |
|
| 470 |
mesh.bindVertexAttribs(DistortedLibrary.mMainProgram); |
|
| 470 |
mMainProgram.useProgram();
|
|
| 471 |
GLES30.glUniform1i(DistortedLibrary.mMainTextureH, 0);
|
|
| 472 |
mesh.bindVertexAttribs(DistortedLibrary.mMainProgram);
|
|
| 471 | 473 |
|
| 472 |
float inflate = mesh.getInflate(); |
|
| 473 |
float distance = surface.mDistance; |
|
| 474 |
float mipmap = surface.mMipmap; |
|
| 475 |
float[] projection= surface.mProjectionMatrix; |
|
| 474 |
float inflate = mesh.getInflate();
|
|
| 475 |
float distance = surface.mDistance;
|
|
| 476 |
float mipmap = surface.mMipmap;
|
|
| 477 |
float[] projection= surface.mProjectionMatrix;
|
|
| 476 | 478 |
|
| 477 |
EffectQueue.send(queues, distance, mipmap, projection, inflate, mesh, 0 ); |
|
| 478 |
GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, mesh.getNumVertices() ); |
|
| 479 |
EffectQueue.send(queues, distance, mipmap, projection, inflate, mesh, 0 );
|
|
| 480 |
GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, mesh.getNumVertices() );
|
|
| 479 | 481 |
|
| 480 |
if( mesh.getShowNormals() ) displayNormals(queues,mesh); |
|
| 482 |
if( mesh.getShowNormals() ) displayNormals(queues,mesh); |
|
| 483 |
} |
|
| 481 | 484 |
} |
| 482 | 485 |
|
| 483 | 486 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 484 | 487 |
|
| 485 | 488 |
static void blitPriv(InternalOutputSurface surface) |
| 486 | 489 |
{
|
| 487 |
mBlitProgram.useProgram(); |
|
| 490 |
if( mBlitProgram!=null ) |
|
| 491 |
{
|
|
| 492 |
mBlitProgram.useProgram(); |
|
| 488 | 493 |
|
| 489 |
GLES30.glViewport(0, 0, surface.mWidth, surface.mHeight ); |
|
| 490 |
GLES30.glUniform1i(mBlitTextureH, 0); |
|
| 491 |
GLES30.glUniform1f( mBlitDepthH , 1.0f-surface.mNear); |
|
| 492 |
GLES30.glVertexAttribPointer(mBlitProgram.mAttribute[0], 2, GLES30.GL_FLOAT, false, 0, mQuadPositions); |
|
| 493 |
GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4); |
|
| 494 |
GLES30.glViewport(0, 0, surface.mWidth, surface.mHeight ); |
|
| 495 |
GLES30.glUniform1i(mBlitTextureH, 0); |
|
| 496 |
GLES30.glUniform1f( mBlitDepthH , 1.0f-surface.mNear); |
|
| 497 |
GLES30.glVertexAttribPointer(mBlitProgram.mAttribute[0], 2, GLES30.GL_FLOAT, false, 0, mQuadPositions); |
|
| 498 |
GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4); |
|
| 499 |
} |
|
| 494 | 500 |
} |
| 495 | 501 |
|
| 496 | 502 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 497 | 503 |
|
| 498 | 504 |
static void blitDepthPriv(InternalOutputSurface surface, float corrW, float corrH) |
| 499 | 505 |
{
|
| 500 |
mBlitDepthProgram.useProgram(); |
|
| 506 |
if( mBlitDepthProgram!=null ) |
|
| 507 |
{
|
|
| 508 |
mBlitDepthProgram.useProgram(); |
|
| 501 | 509 |
|
| 502 |
GLES30.glViewport(0, 0, surface.mWidth, surface.mHeight ); |
|
| 503 |
GLES30.glUniform1i(mBlitDepthTextureH, 0); |
|
| 504 |
GLES30.glUniform1i(mBlitDepthDepthTextureH, 1); |
|
| 505 |
GLES30.glUniform2f(mBlitDepthTexCorrH, corrW, corrH ); |
|
| 506 |
GLES30.glUniform1f( mBlitDepthDepthH , 1.0f-surface.mNear); |
|
| 507 |
GLES30.glVertexAttribPointer(mBlitDepthProgram.mAttribute[0], 2, GLES30.GL_FLOAT, false, 0, mQuadPositions); |
|
| 508 |
GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4); |
|
| 510 |
GLES30.glViewport(0, 0, surface.mWidth, surface.mHeight ); |
|
| 511 |
GLES30.glUniform1i(mBlitDepthTextureH, 0); |
|
| 512 |
GLES30.glUniform1i(mBlitDepthDepthTextureH, 1); |
|
| 513 |
GLES30.glUniform2f(mBlitDepthTexCorrH, corrW, corrH ); |
|
| 514 |
GLES30.glUniform1f( mBlitDepthDepthH , 1.0f-surface.mNear); |
|
| 515 |
GLES30.glVertexAttribPointer(mBlitDepthProgram.mAttribute[0], 2, GLES30.GL_FLOAT, false, 0, mQuadPositions); |
|
| 516 |
GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4); |
|
| 517 |
} |
|
| 509 | 518 |
} |
| 510 | 519 |
|
| 511 | 520 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| ... | ... | |
| 591 | 600 |
|
| 592 | 601 |
static void oitClear(InternalOutputSurface surface, int counter) |
| 593 | 602 |
{
|
| 594 |
if( mLinkedListSSBO[0]<0 )
|
|
| 603 |
if( mOITClearProgram!=null )
|
|
| 595 | 604 |
{
|
| 596 |
GLES30.glGenBuffers(1,mLinkedListSSBO,0); |
|
| 597 |
|
|
| 598 |
int size = (int)(surface.mWidth*surface.mHeight*(3*mBufferSize+1)*4); |
|
| 599 |
GLES30.glBindBuffer(GLES31.GL_SHADER_STORAGE_BUFFER, mLinkedListSSBO[0]); |
|
| 600 |
GLES30.glBufferData(GLES31.GL_SHADER_STORAGE_BUFFER, size, null, GLES30.GL_DYNAMIC_READ|GLES30.GL_DYNAMIC_DRAW); |
|
| 601 |
GLES30.glBindBuffer(GLES31.GL_SHADER_STORAGE_BUFFER, 0); |
|
| 605 |
if( mLinkedListSSBO[0]<0 ) |
|
| 606 |
{
|
|
| 607 |
GLES30.glGenBuffers(1,mLinkedListSSBO,0); |
|
| 602 | 608 |
|
| 603 |
GLES30.glBindBufferBase(GLES31.GL_SHADER_STORAGE_BUFFER, 1, mLinkedListSSBO[0]); |
|
| 604 |
} |
|
| 609 |
int size = (int)(surface.mWidth*surface.mHeight*(3*mBufferSize+1)*4); |
|
| 610 |
GLES30.glBindBuffer(GLES31.GL_SHADER_STORAGE_BUFFER, mLinkedListSSBO[0]); |
|
| 611 |
GLES30.glBufferData(GLES31.GL_SHADER_STORAGE_BUFFER, size, null, GLES30.GL_DYNAMIC_READ|GLES30.GL_DYNAMIC_DRAW); |
|
| 612 |
GLES30.glBindBuffer(GLES31.GL_SHADER_STORAGE_BUFFER, 0); |
|
| 605 | 613 |
|
| 606 |
// See if we have overflown the SSBO in one of the previous frames. |
|
| 607 |
// If yes, assume we need to make the SSBO larger. |
|
| 608 |
float overflow = counter/(mBufferSize*surface.mWidth*surface.mHeight); |
|
| 614 |
GLES30.glBindBufferBase(GLES31.GL_SHADER_STORAGE_BUFFER, 1, mLinkedListSSBO[0]); |
|
| 615 |
} |
|
| 609 | 616 |
|
| 610 |
if( overflow>1.0f ) |
|
| 611 |
{
|
|
| 612 |
//android.util.Log.e("effects", "previous frame rendered "+counter+
|
|
| 613 |
// " fragments, but there was only "+(mBufferSize*surface.mWidth*surface.mHeight)+" space"); |
|
| 617 |
// See if we have overflown the SSBO in one of the previous frames. |
|
| 618 |
// If yes, assume we need to make the SSBO larger. |
|
| 619 |
float overflow = counter/(mBufferSize*surface.mWidth*surface.mHeight); |
|
| 614 | 620 |
|
| 615 |
mBufferSize *= (int)(overflow+1.0f); |
|
| 616 |
int size = (int)(surface.mWidth*surface.mHeight*(3*mBufferSize+1)*4); |
|
| 617 |
GLES30.glBindBuffer(GLES31.GL_SHADER_STORAGE_BUFFER, mLinkedListSSBO[0]); |
|
| 618 |
GLES30.glBufferData(GLES31.GL_SHADER_STORAGE_BUFFER, size, null, GLES30.GL_DYNAMIC_READ|GLES30.GL_DYNAMIC_DRAW); |
|
| 619 |
GLES30.glBindBuffer(GLES31.GL_SHADER_STORAGE_BUFFER, 0); |
|
| 620 |
} |
|
| 621 |
if( overflow>1.0f ) |
|
| 622 |
{
|
|
| 623 |
//android.util.Log.e("effects", "previous frame rendered "+counter+
|
|
| 624 |
// " fragments, but there was only "+(mBufferSize*surface.mWidth*surface.mHeight)+" space"); |
|
| 625 |
|
|
| 626 |
mBufferSize *= (int)(overflow+1.0f); |
|
| 627 |
int size = (int)(surface.mWidth*surface.mHeight*(3*mBufferSize+1)*4); |
|
| 628 |
GLES30.glBindBuffer(GLES31.GL_SHADER_STORAGE_BUFFER, mLinkedListSSBO[0]); |
|
| 629 |
GLES30.glBufferData(GLES31.GL_SHADER_STORAGE_BUFFER, size, null, GLES30.GL_DYNAMIC_READ|GLES30.GL_DYNAMIC_DRAW); |
|
| 630 |
GLES30.glBindBuffer(GLES31.GL_SHADER_STORAGE_BUFFER, 0); |
|
| 631 |
} |
|
| 621 | 632 |
|
| 622 |
mOITClearProgram.useProgram(); |
|
| 633 |
mOITClearProgram.useProgram();
|
|
| 623 | 634 |
|
| 624 |
GLES30.glViewport(0, 0, surface.mWidth, surface.mHeight ); |
|
| 625 |
GLES30.glUniform2f(mOITClearTexCorrH, 1.0f, 1.0f ); // corrections do not really matter here - only present because of common vertex shader. |
|
| 626 |
GLES30.glUniform1f( mOITClearDepthH , 1.0f); // likewise depth |
|
| 627 |
GLES30.glUniform2ui(mOITClearSizeH, surface.mWidth, surface.mHeight); |
|
| 628 |
GLES30.glVertexAttribPointer(mOITClearProgram.mAttribute[0], 2, GLES30.GL_FLOAT, false, 0, mQuadPositions); |
|
| 629 |
GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4); |
|
| 635 |
GLES30.glViewport(0, 0, surface.mWidth, surface.mHeight ); |
|
| 636 |
GLES30.glUniform2f(mOITClearTexCorrH, 1.0f, 1.0f ); // corrections do not really matter here - only present because of common vertex shader. |
|
| 637 |
GLES30.glUniform1f( mOITClearDepthH , 1.0f); // likewise depth |
|
| 638 |
GLES30.glUniform2ui(mOITClearSizeH, surface.mWidth, surface.mHeight); |
|
| 639 |
GLES30.glVertexAttribPointer(mOITClearProgram.mAttribute[0], 2, GLES30.GL_FLOAT, false, 0, mQuadPositions); |
|
| 640 |
GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4); |
|
| 641 |
} |
|
| 630 | 642 |
} |
| 631 | 643 |
|
| 632 | 644 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| ... | ... | |
| 634 | 646 |
|
| 635 | 647 |
static void oitBuild(InternalOutputSurface surface, float corrW, float corrH) |
| 636 | 648 |
{
|
| 637 |
mOITBuildProgram.useProgram(); |
|
| 649 |
if( mOITBuildProgram!=null ) |
|
| 650 |
{
|
|
| 651 |
mOITBuildProgram.useProgram(); |
|
| 638 | 652 |
|
| 639 |
GLES30.glViewport(0, 0, surface.mWidth, surface.mHeight ); |
|
| 640 |
GLES30.glUniform1i(mOITBuildTextureH, 0); |
|
| 641 |
GLES30.glUniform1i(mOITBuildDepthTextureH, 1); |
|
| 642 |
GLES30.glUniform2f(mOITBuildTexCorrH, corrW, corrH ); |
|
| 643 |
GLES30.glUniform2ui(mOITBuildSizeH, surface.mWidth, surface.mHeight); |
|
| 644 |
GLES30.glUniform1ui(mOITBuildNumRecordsH, (int)(mBufferSize*surface.mWidth*surface.mHeight) ); |
|
| 645 |
GLES30.glUniform1f(mOITBuildDepthH , 1.0f-surface.mNear); |
|
| 646 |
GLES30.glVertexAttribPointer(mOITBuildProgram.mAttribute[0], 2, GLES30.GL_FLOAT, false, 0, mQuadPositions); |
|
| 647 |
GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4); |
|
| 653 |
GLES30.glViewport(0, 0, surface.mWidth, surface.mHeight ); |
|
| 654 |
GLES30.glUniform1i(mOITBuildTextureH, 0); |
|
| 655 |
GLES30.glUniform1i(mOITBuildDepthTextureH, 1); |
|
| 656 |
GLES30.glUniform2f(mOITBuildTexCorrH, corrW, corrH ); |
|
| 657 |
GLES30.glUniform2ui(mOITBuildSizeH, surface.mWidth, surface.mHeight); |
|
| 658 |
GLES30.glUniform1ui(mOITBuildNumRecordsH, (int)(mBufferSize*surface.mWidth*surface.mHeight) ); |
|
| 659 |
GLES30.glUniform1f(mOITBuildDepthH , 1.0f-surface.mNear); |
|
| 660 |
GLES30.glVertexAttribPointer(mOITBuildProgram.mAttribute[0], 2, GLES30.GL_FLOAT, false, 0, mQuadPositions); |
|
| 661 |
GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4); |
|
| 662 |
} |
|
| 648 | 663 |
} |
| 649 | 664 |
|
| 650 | 665 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| ... | ... | |
| 652 | 667 |
|
| 653 | 668 |
static void oitCollapse(InternalOutputSurface surface, float corrW, float corrH) |
| 654 | 669 |
{
|
| 655 |
mOITCollapseProgram.useProgram(); |
|
| 670 |
if( mOITCollapseProgram!=null ) |
|
| 671 |
{
|
|
| 672 |
mOITCollapseProgram.useProgram(); |
|
| 656 | 673 |
|
| 657 |
GLES30.glViewport(0, 0, surface.mWidth, surface.mHeight ); |
|
| 658 |
GLES30.glUniform1i(mOITCollapseDepthTextureH, 1); |
|
| 659 |
GLES30.glUniform2f(mOITCollapseTexCorrH, corrW, corrH ); |
|
| 660 |
GLES30.glUniform2ui(mOITCollapseSizeH, surface.mWidth, surface.mHeight); |
|
| 661 |
GLES30.glUniform1f( mOITCollapseDepthH , 1.0f-surface.mNear); |
|
| 662 |
GLES30.glVertexAttribPointer(mOITCollapseProgram.mAttribute[0], 2, GLES30.GL_FLOAT, false, 0, mQuadPositions); |
|
| 663 |
GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4); |
|
| 674 |
GLES30.glViewport(0, 0, surface.mWidth, surface.mHeight ); |
|
| 675 |
GLES30.glUniform1i(mOITCollapseDepthTextureH, 1); |
|
| 676 |
GLES30.glUniform2f(mOITCollapseTexCorrH, corrW, corrH ); |
|
| 677 |
GLES30.glUniform2ui(mOITCollapseSizeH, surface.mWidth, surface.mHeight); |
|
| 678 |
GLES30.glUniform1f( mOITCollapseDepthH , 1.0f-surface.mNear); |
|
| 679 |
GLES30.glVertexAttribPointer(mOITCollapseProgram.mAttribute[0], 2, GLES30.GL_FLOAT, false, 0, mQuadPositions); |
|
| 680 |
GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4); |
|
| 681 |
} |
|
| 664 | 682 |
} |
| 665 | 683 |
|
| 666 | 684 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| ... | ... | |
| 668 | 686 |
|
| 669 | 687 |
static void oitRender(InternalOutputSurface surface, float corrW, float corrH) |
| 670 | 688 |
{
|
| 671 |
mOITRenderProgram.useProgram(); |
|
| 689 |
if( mOITRenderProgram!=null ) |
|
| 690 |
{
|
|
| 691 |
mOITRenderProgram.useProgram(); |
|
| 672 | 692 |
|
| 673 |
GLES30.glViewport(0, 0, surface.mWidth, surface.mHeight ); |
|
| 674 |
GLES30.glUniform2f(mOITRenderTexCorrH, corrW, corrH ); |
|
| 675 |
GLES30.glUniform2ui(mOITRenderSizeH, surface.mWidth, surface.mHeight); |
|
| 676 |
GLES30.glUniform1f( mOITRenderDepthH , 1.0f-surface.mNear); |
|
| 677 |
GLES30.glVertexAttribPointer(mOITRenderProgram.mAttribute[0], 2, GLES30.GL_FLOAT, false, 0, mQuadPositions); |
|
| 678 |
GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4); |
|
| 693 |
GLES30.glViewport(0, 0, surface.mWidth, surface.mHeight ); |
|
| 694 |
GLES30.glUniform2f(mOITRenderTexCorrH, corrW, corrH ); |
|
| 695 |
GLES30.glUniform2ui(mOITRenderSizeH, surface.mWidth, surface.mHeight); |
|
| 696 |
GLES30.glUniform1f( mOITRenderDepthH , 1.0f-surface.mNear); |
|
| 697 |
GLES30.glVertexAttribPointer(mOITRenderProgram.mAttribute[0], 2, GLES30.GL_FLOAT, false, 0, mQuadPositions); |
|
| 698 |
GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4); |
|
| 699 |
} |
|
| 679 | 700 |
} |
| 680 | 701 |
|
| 681 | 702 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
Also available in: Unified diff
Do not crash if we failed to compile some programs.