When the renderer wishes to send a bucket (a.k.a. tile) of 2D pixels to the display plugins for I/O such as display in an interactive frame buffer or to commit to an image file, it first makes a copy of the pixels as they currently appear in its internal framebuffer. This copy includes all of the AOV channels associated with the current camera. (Multi-camera scenarios such as stereo renders have a separate framebuffer for each camera and send pixels to their associated display plugins at different times.)
If there is an active RixDisplayFilter display filter plugin for the scene, the renderer will then invoke that plugin and give it access to the pixels. The filter is then free to read from and write to any of the channels for any of the pixels within the bucket.
As shown here, however, a display filter may be given a reference to another that precedes it. The standard
PxrDisplayFilterCombiner, for example, simply runs a chain of other display filters in sequence.
Display filters implement the
RixDisplayFilter interface found in
RixDisplayFilter is a subclass of RixShadingPlugin, and therefore shares the same initialization, synchronization, and parameter table logic as other shading plugins. Therefore to start developing your own display filter, you can
#include "RixDisplayFilter.h" and make sure that your display filter class implements the required methods inherited from the RixShadingPlugin interface:
CreateInstanceData(). You should also use the
RIX_DISPLAYFILTERDESTROY() macros to define the
DestroyRixDisplayFilter() functions for creating and destroying instances of your class.