render method
dynamic
render(})
override
Implementation
render(renderer, writeBuffer, readBuffer,
{num? deltaTime, bool? maskActive}) {
var context = renderer.getContext();
var state = renderer.state;
// don't update color or depth
state.buffers.color.setMask(false);
state.buffers.depth.setMask(false);
// lock buffers
state.buffers.color.setLocked(true);
state.buffers.depth.setLocked(true);
// set up stencil
var writeValue, clearValue;
if (this.inverse) {
writeValue = 0;
clearValue = 1;
} else {
writeValue = 1;
clearValue = 0;
}
state.buffers.stencil.setTest(true);
state.buffers.stencil
.setOp(context.REPLACE, context.REPLACE, context.REPLACE);
state.buffers.stencil.setFunc(context.ALWAYS, writeValue, 0xffffffff);
state.buffers.stencil.setClear(clearValue);
state.buffers.stencil.setLocked(true);
// draw into the stencil buffer
renderer.setRenderTarget(readBuffer);
if (this.clear) renderer.clear();
renderer.render(this.scene, this.camera);
renderer.setRenderTarget(writeBuffer);
if (this.clear) renderer.clear();
renderer.render(this.scene, this.camera);
// unlock color and depth buffer for subsequent rendering
state.buffers.color.setLocked(false);
state.buffers.depth.setLocked(false);
// only render where stencil is set to 1
state.buffers.stencil.setLocked(false);
state.buffers.stencil.setFunc(context.EQUAL, 1, 0xffffffff); // draw if == 1
state.buffers.stencil.setOp(context.KEEP, context.KEEP, context.KEEP);
state.buffers.stencil.setLocked(true);
}