Effect Manager
C4Effects.h

Effect::Render

Called when an effect should be rendered.
Prototype

virtual void Render(const Camera *camera, List<Renderable> *effectList) = 0;

Parameters
camera The camera for which the effect is being rendered.
effectList An array of render lists to which the effect should add its renderables.
Description
The Render function is called when the World Manager has determined that an effect needs to be rendered. This function is only called for an effect node that is enabled and has already passed the visibility and occlusion tests. (An effect can be disabled by setting the kNodeDisabled flag with the Node::SetNodeFlags function.)

When the Render function is called, an Effect node should use the List::Append function to add itself and any additional renderable objects to one or more of the lists in the array specified by the effectList parameter. This array should be indexed using the following values.
kEffectListLight Fully lit effects. These are rendered during the ambient pass and lighting passes.
kEffectListOpaque Opaque effects. These are rendered after the final lighting pass and before any transparent effects.
kEffectListTransparent Transparent effects. These are rendered after all opaque effects and are sorted back to front.
kEffectListFrontmost Frontmost effects. These are render after all transparent effects and are not sorted.
kEffectListOcclusion Occlusion queries. These are rendered after the ambient pass and before the first lighting pass.
kEffectListDistortion Distortion effects. These are rendered into the distortion buffer for post-processing.
For example, to add an effect renderable to the transparent effect list, the Render function should make the following call.

effectList[kEffectListTransparent].Append(this);

Special Considerations
Note that the Render function can be called multiple times during the same frame for an effect that is visible from multiple cameras. The Render function should not perform any iterative movement under the assumption that the Render function is called only once. Instead, this type of computation should be peformed in the Effect::Move function.
See Also
List

Renderable

Effect::Move

Node::SetVisibilityProc

Node::SetOcclusionProc