RM: per-pass render method
This commit is contained in:
parent
18db26292f
commit
ea4d750d52
@ -585,6 +585,37 @@ public class RenderManager {
|
||||
renderGeometry(gl.get(i));
|
||||
}
|
||||
}
|
||||
|
||||
public void renderGeometryListNew(GeometryList gl) {
|
||||
int size = gl.size();
|
||||
int pass = 0;
|
||||
|
||||
// Keep rendering geometries in the list
|
||||
// checking each time if they need more passes.
|
||||
// Geometries which need more passes are added to the beginning
|
||||
// of the list and then another pass is executed.
|
||||
// In the end, all geometries will have their passes rendered.
|
||||
while (true) {
|
||||
int writeIdx = 0;
|
||||
for (int i = 0; i < size; i++) {
|
||||
Geometry obj = gl.get(i);
|
||||
renderGeometry(obj);
|
||||
boolean morePasses = true;
|
||||
if (morePasses) {
|
||||
// Geometry wants to be rendered again.
|
||||
// Move it to the beginning of the list.
|
||||
gl.set(writeIdx++, obj);
|
||||
}
|
||||
}
|
||||
// No geometries were written to the beginning of the list -
|
||||
// all passes are finished.
|
||||
if (writeIdx == 0) {
|
||||
return;
|
||||
}
|
||||
pass++;
|
||||
size = writeIdx;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Preloads a scene for rendering.
|
||||
|
Loading…
x
Reference in New Issue
Block a user