Revision d620ff06
Added by Leszek Koltunski almost 9 years ago
| src/main/java/org/distorted/library/DistortedObjectTree.java | ||
|---|---|---|
| 51 | 51 |
long ID; |
| 52 | 52 |
int numPointingNodes; |
| 53 | 53 |
DistortedFramebuffer mDF; |
| 54 |
boolean mRendered;
|
|
| 54 |
int numRendered;
|
|
| 55 | 55 |
|
| 56 | 56 |
NodeData(long id) |
| 57 | 57 |
{
|
| 58 | 58 |
ID = id; |
| 59 | 59 |
numPointingNodes= 1; |
| 60 | 60 |
mDF = null; |
| 61 |
mRendered = false;
|
|
| 61 |
numRendered = 0;
|
|
| 62 | 62 |
} |
| 63 | 63 |
} |
| 64 | 64 |
|
| ... | ... | |
| 70 | 70 |
mMapNodeID.clear(); |
| 71 | 71 |
} |
| 72 | 72 |
|
| 73 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 74 |
|
|
| 75 |
private void markRecursive() |
|
| 76 |
{
|
|
| 77 |
mData.mRendered = false; |
|
| 78 |
|
|
| 79 |
synchronized(this) |
|
| 80 |
{
|
|
| 81 |
for(int i=0; i<mNumChildren[0]; i++) mChildren.get(i).markRecursive(); |
|
| 82 |
} |
|
| 83 |
} |
|
| 84 |
|
|
| 85 | 73 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 86 | 74 |
|
| 87 | 75 |
private void drawRecursive(long currTime, DistortedFramebuffer df) |
| ... | ... | |
| 94 | 82 |
} |
| 95 | 83 |
else |
| 96 | 84 |
{
|
| 97 |
if( !mData.mRendered )
|
|
| 85 |
if( mData.numRendered==0 )
|
|
| 98 | 86 |
{
|
| 99 |
mData.mRendered = true; |
|
| 100 | 87 |
mData.mDF.setAsOutput(); |
| 101 | 88 |
|
| 102 | 89 |
GLES20.glClearColor(0.0f, 0.0f, 0.0f, 0.0f); |
| ... | ... | |
| 117 | 104 |
} |
| 118 | 105 |
} |
| 119 | 106 |
|
| 107 |
mData.numRendered++; |
|
| 108 |
mData.numRendered %= mData.numPointingNodes; |
|
| 109 |
|
|
| 120 | 110 |
df.setAsOutput(); |
| 121 | 111 |
mData.mDF.setAsInput(); |
| 122 | 112 |
} |
| ... | ... | |
| 206 | 196 |
|
| 207 | 197 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 208 | 198 |
// this will be called on startup and every time OpenGL context has been lost |
| 209 |
// also call this from the constructor if the OpenGL context has been created already. |
|
| 210 |
|
|
| 199 |
|
|
| 211 | 200 |
static void reset() |
| 212 | 201 |
{
|
| 213 | 202 |
NodeData tmp; |
| ... | ... | |
| 219 | 208 |
if( tmp.mDF != null ) |
| 220 | 209 |
{
|
| 221 | 210 |
tmp.mDF.reset(); |
| 222 |
tmp.mRendered = false;
|
|
| 211 |
tmp.numRendered = 0;
|
|
| 223 | 212 |
} |
| 224 | 213 |
} |
| 225 | 214 |
} |
| ... | ... | |
| 471 | 460 |
public void draw(long currTime) |
| 472 | 461 |
{
|
| 473 | 462 |
GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0); |
| 474 |
markRecursive(); |
|
| 475 | 463 |
drawRecursive(currTime,Distorted.mFramebuffer); |
| 476 | 464 |
DistortedFramebuffer.deleteAllMarked(); |
| 477 | 465 |
DistortedTexture.deleteAllMarked(); |
| ... | ... | |
| 489 | 477 |
public void draw(long currTime, DistortedFramebuffer df) |
| 490 | 478 |
{
|
| 491 | 479 |
df.setAsOutput(); |
| 492 |
markRecursive(); |
|
| 493 | 480 |
drawRecursive(currTime,df); |
| 494 | 481 |
DistortedFramebuffer.deleteAllMarked(); |
| 495 | 482 |
DistortedTexture.deleteAllMarked(); |
Also available in: Unified diff
Speed up ObjectTree: we no longer have to traverse the whole tree before rendering to mark everything as not-rendered-yet.