VideoPostData Class Reference

#include <c4d_videopostdata.h>

Inheritance diagram for VideoPostData:

Detailed Description

A data class for creating video post plugins.
In a video post hook it is possible to do just everything, not just the image processing that the name implies.
It is possible to prepare information for shaders, modify image buffers, initialize hardware, output an image to an image recorder etc.

Use RegisterVideoPostPlugin() to register a video post plugin.

Public Member Functions

virtual Bool Draw (BaseVideoPost *node, BaseDraw *bd, BaseDrawHelp *bh)
 
virtual void AllocateBuffers (BaseVideoPost *node, Render *render, BaseDocument *doc)
 
virtual VIDEOPOSTINFO GetRenderInfo (BaseVideoPost *node)
 
virtual void CalcVolumetric (BaseVideoPost *node, VolumeData *vd)
 
virtual void CalcShadow (BaseVideoPost *node, VolumeData *vd)
 
virtual Bool GlDraw (BaseVideoPost *node, BaseDraw *bd, GlFrameBuffer *fbuf, Int32 colortex, Int32 depthtex, VIDEOPOST_GLDRAW flags)
 
virtual VIDEOPOST_GLINFO GetGlInfo (BaseVideoPost *node, BaseDocument *doc, BaseDraw *bd)
 
virtual Bool RenderEngineCheck (BaseVideoPost *node, Int32 id)
 
virtual void SetDiffuseWeight (BaseVideoPost *node, Int32 cpu_index, Float weight)
 
virtual Bool GetMotionInfo (BaseVideoPost *node, MotionInfo &info)
 
- Public Member Functions inherited from NodeData
 NodeData ()
 
GeListNodeGet (void) const
 
virtual Bool Message (GeListNode *node, Int32 type, void *data)
 
virtual void GetBubbleHelp (GeListNode *node, String &str)
 
virtual BaseDocumentGetDocument (GeListNode *node)
 
virtual Int32 GetBranchInfo (GeListNode *node, BranchInfo *info, Int32 max, GETBRANCHINFO flags)
 
virtual Bool IsInstanceOf (const GeListNode *node, Int32 type) const
 
virtual Bool IsDocumentRelated (const GeListNode *node, Bool &docrelated) const
 
virtual Bool Init (GeListNode *node)
 
virtual void Free (GeListNode *node)
 
virtual Bool Read (GeListNode *node, HyperFile *hf, Int32 level)
 
virtual Bool Write (GeListNode *node, HyperFile *hf)
 
virtual Bool CopyTo (NodeData *dest, GeListNode *snode, GeListNode *dnode, COPYFLAGS flags, AliasTrans *trn)
 
virtual Bool GetDDescription (GeListNode *node, Description *description, DESCFLAGS_DESC &flags)
 
virtual Bool GetDParameter (GeListNode *node, const DescID &id, GeData &t_data, DESCFLAGS_GET &flags)
 
virtual Bool SetDParameter (GeListNode *node, const DescID &id, const GeData &t_data, DESCFLAGS_SET &flags)
 
virtual Bool GetDEnabling (GeListNode *node, const DescID &id, const GeData &t_data, DESCFLAGS_ENABLE flags, const BaseContainer *itemdesc)
 
virtual Bool TranslateDescID (GeListNode *node, const DescID &id, DescID &res_id, C4DAtom *&res_at)
 
- Public Member Functions inherited from BaseData
 BaseData ()
 
virtual ~BaseData (void)
 
void Destructor (void)
 

Execute

virtual RENDERRESULT Execute (BaseVideoPost *node, VideoPostStruct *vps)
 
virtual void ExecuteLine (BaseVideoPost *node, PixelPost *pp)
 
virtual void ExecutePixel (BaseVideoPost *node, PixelPost *pp, Int32 x, Int32 subx, Int32 suby)
 

Physical

virtual Vector ComputeDiffuseGI (BaseVideoPost *node, VolumeData *vd, Float receive_strength)
 
virtual Vector ComputeDiffuseCaustic (BaseVideoPost *node, VolumeData *vd, Float sampleradius, Int32 accuracy)
 
virtual Vector ComputeVolumeCaustic (BaseVideoPost *node, const Vector64 &p, Int32 cpu_index)
 
virtual void CreateRay (Ray *dst, Float x, Float y)
 
virtual void CreateExtendedRay (Ray *dst, Float x, Float y, Float lensx, Float lensy, Float time)
 

Stereo

virtual Int32 StereoGetCameraCountEditor (BaseVideoPost *node, BaseDocument *doc, BaseDraw *bd)
 
virtual Int32 StereoGetCameraCountRenderer (BaseVideoPost *node, BaseDocument *doc, RenderData *rd)
 
virtual Bool StereoGetCameraInfo (BaseVideoPost *node, BaseDocument *doc, BaseDraw *bd, RenderData *rd, Int32 index, StereoCameraInfo &info)
 
virtual Int32 StereoGetSceneHookID (BaseVideoPost *node)
 
virtual Bool StereoMergeImages (BaseVideoPost *node, BaseBitmap *dest, const BaseBitmap *const *source, Int32 cnt, const BaseContainer &settings, COLORSPACETRANSFORMATION transform)
 

Team Render/NET

virtual Bool NetFrameInit (BaseVideoPost *node, BaseDocument *doc, RenderJob *job, Int32 assignedClients, const NetRenderData *renderData, MultipassBitmap *frameBmp, BaseThread *bt, Int32 &realdepth)
 
virtual void NetFrameFree (BaseVideoPost *node)
 
virtual Bool NetFrameMessage (BaseVideoPost *node, const C4DUuid &remoteUuid, const NetRenderBuffer &data, NetRenderBuffer *result)
 
virtual Bool NetCreateBuffer (BaseVideoPost *node, VideoPostStruct *vps, Int32 x, Int32 y, Int32 sizex, Int32 sizey, Int32 &id, Int32 &subid)
 

Additional Inherited Members

- Protected Attributes inherited from NodeData
GeListNodeprivate_link
 

Member Function Documentation

§ Draw()

virtual Bool Draw ( BaseVideoPost node,
BaseDraw bd,
BaseDrawHelp bh 
)
virtual

Not used!

§ AllocateBuffers()

virtual void AllocateBuffers ( BaseVideoPost node,
Render render,
BaseDocument doc 
)
virtual

Called to request additional buffers to process.
One buffer is always there: VPBUFFER_RGBA, it is the RGB image.
Either the user (on the Multipass tab) or a video post plugin now can request more buffers (like VPBUFFER_DIFFUSE, which is the Diffuse Multipass layer) with any color resolution (8 bit, 16 bit or 32 bit for each channel).
For example:

render->AllocateBuffer(VPBUFFER_ALPHA, 0, 32, false);
Parameters
[in]nodeThe BaseVideoPost connected with the VideoPostData instance. Equal to static_cast<BaseVideoPost*>Get(). Provided for speed and convenience. Cinema 4D owns the pointed video post.
[in,out]renderThe Render class to use to allocate additional buffers. The caller owns the pointed render.
[in]docThe active document. The caller owns the pointed document.

§ GetRenderInfo()

virtual VIDEOPOSTINFO GetRenderInfo ( BaseVideoPost node)
virtual

Called to get information about the video post.

Parameters
[in]nodeThe BaseVideoPost connected with the VideoPostData instance. Equal to static_cast<BaseVideoPost*>Get(). Provided for speed and convenience. Cinema 4D owns the pointed video post.
Returns
The video post information: VIDEOPOSTINFO

§ Execute()

virtual RENDERRESULT Execute ( BaseVideoPost node,
VideoPostStruct vps 
)
virtual

Called for all video post entry and exit points: VIDEOPOSTCALL

The calling sequence is:
VIDEOPOSTCALL_FRAMESEQUENCE - open==true - Series of images starts. - <Sequence>
 VIDEOPOSTCALL_FRAME - open==true - Image render starts. - <Frame>
  VIDEOPOSTCALL_SUBFRAME - open==true - Sub-frame starts. - <Sub-frame>
  VIDEOPOSTCALL_RENDER - open==true - Render precalculation. VolumeData not yet completely accessible.
  VIDEOPOSTCALL_INNER - open==true - Render precalculation.
  ExecuteLine()/ExecutePixel() During rendering.
  VIDEOPOSTCALL_INNER - open==false - Immediately after rendering.
  VIDEOPOSTCALL_RENDER - open==false - Immediately after shader cleanup. VolumeData no longer accessible!
  VIDEOPOSTCALL_SUBFRAME - open==false - Sub-frame rendering done. - </Sub-frame>
 VIDEOPOSTCALL_FRAME - open==false - Frame rendering done. - </Frame>
VIDEOPOSTCALL_FRAMESEQUENCE - open==false - Complete rendering process finished. - </Sequence>

The order of calls is guaranteed, and every opening call is matched by a corresponding closing call.
VIDEOPOSTCALL_RENDER is opened immediately before shader initialization, and VIDEOPOSTCALL_INNER immediately before rendering.

Multiple sub-frames are rendered if scene motion blur or field rendering is used. In this case the number of subframes/fields is available in VideoPostStruct::subframe_cnt and VideoPostStruct::field_cnt.

Most of the times only the VIDEOPOSTCALL_RENDER and VIDEOPOSTCALL_INNER calls are of interest. In this case Execute would look like this:

RENDERRESULT MyVideoPost::Execute(BaseVideoPost *node, VideoPostStruct *vps)
{
// Do something...
return result;
}
Parameters
[in]nodeThe BaseVideoPost connected with the VideoPostData instance. Equal to static_cast<BaseVideoPost*>Get(). Provided for speed and convenience. Cinema 4D owns the pointed video post.
[in]vpsThe video post information. The caller owns the pointed video post struct.
Returns
The render result: RENDERRESULT

§ ExecuteLine()

virtual void ExecuteLine ( BaseVideoPost node,
PixelPost pp 
)
virtual

Called after each rendered line.

Parameters
[in]nodeThe BaseVideoPost connected with the VideoPostData instance. Equal to static_cast<BaseVideoPost*>Get(). Provided for speed and convenience. Cinema 4D owns the pointed video post.
[in]ppThe pixel buffer. The caller owns the pointed buffer.

§ ExecutePixel()

virtual void ExecutePixel ( BaseVideoPost node,
PixelPost pp,
Int32  x,
Int32  subx,
Int32  suby 
)
virtual

Called for every sub-fragment (sub-pixel) that is rendered.

Parameters
[in]nodeThe BaseVideoPost connected with the VideoPostData instance. Equal to static_cast<BaseVideoPost*>Get(). Provided for speed and convenience. Cinema 4D owns the pointed video post.
[in]ppThe pixel buffer. The caller owns the pointed buffer.
[in]xThe main pixel X position.
[in]subxThe sub-pixel X position. (0 <= subx <= 15)
[in]subyThe sub-pixel Y position. (0 <= suby <= 15)

§ CalcVolumetric()

virtual void CalcVolumetric ( BaseVideoPost node,
VolumeData vd 
)
virtual

Called to calculate volumetric information.
Set vd->col and vd->trans.
If VIDEOPOSTINFO_CALCVOLUMETRIC is not set then CalcVolumetric is not needed. If this flag is set then CalcVolumetric is required.
Called for spans; vd->ray->p to vd->p where vd->ray->p is the entry point and vd->p is the exit point.

Warning
No OS calls are allowed during this function. Doing so could cause a crash, since it can be called in a multi-processor context.
Parameters
[in]nodeThe BaseVideoPost connected with the VideoPostData instance. Equal to static_cast<BaseVideoPost*>Get(). Provided for speed and convenience. Cinema 4D owns the pointed video post.
[in,out]vdThe volume data to use and modify. The caller owns the pointed volume data.

§ CalcShadow()

virtual void CalcShadow ( BaseVideoPost node,
VolumeData vd 
)
virtual

Called to calculate shadow information.
If VIDEOPOSTINFO_CALCSHADOW is not set then CalcShadow is not needed. If this flag is set then CalcShadow is required.

Warning
No OS calls are allowed during this function. Doing so could cause a crash, since it can be called in a multi-processor context.
Parameters
[in]nodeThe BaseVideoPost connected with the VideoPostData instance. Equal to static_cast<BaseVideoPost*>Get(). Provided for speed and convenience. Cinema 4D owns the pointed video post.
[in,out]vdThe volume data to use and modify. The caller owns the pointed volume data.

§ GlDraw()

virtual Bool GlDraw ( BaseVideoPost node,
BaseDraw bd,
GlFrameBuffer *  fbuf,
Int32  colortex,
Int32  depthtex,
VIDEOPOST_GLDRAW  flags 
)
virtual

Extended OpenGL mode. This mode is not documented. See c4d_gl.h for definitions.

§ GetGlInfo()

virtual VIDEOPOST_GLINFO GetGlInfo ( BaseVideoPost node,
BaseDocument doc,
BaseDraw bd 
)
virtual

Extended OpenGL mode. This mode is not documented. See c4d_gl.h for definitions.

§ ComputeDiffuseGI()

virtual Vector ComputeDiffuseGI ( BaseVideoPost node,
VolumeData vd,
Float  receive_strength 
)
virtual

Called to calculate global illumination information.
If VIDEOPOSTINFO_GLOBALILLUMINATION is not set then ComputeDiffuseGI is not needed. If this flag is set then ComputeDiffuseGI is required.

Warning
No OS calls are allowed during this function. Doing so could cause a crash, since it can be called in a multi-processor context.
Parameters
[in]nodeThe BaseVideoPost connected with the VideoPostData instance. Equal to static_cast<BaseVideoPost*>Get(). Provided for speed and convenience. Cinema 4D owns the pointed video post.
[in,out]vdThe volume data to use and modify. The caller owns the pointed volume data.
[in]receive_strengthThe receive GI strength of the rendered materials.
Returns
The global illumination component.

§ ComputeDiffuseCaustic()

virtual Vector ComputeDiffuseCaustic ( BaseVideoPost node,
VolumeData vd,
Float  sampleradius,
Int32  accuracy 
)
virtual

Called to calculate surface caustics information.
If VIDEOPOSTINFO_CAUSTICS is not set then ComputeDiffuseCaustic is not needed. If this flag is set then ComputeDiffuseCaustic is required.

Warning
No OS calls are allowed during this function. Doing so could cause a crash, since it can be called in a multi-processor context.
Parameters
[in]nodeThe BaseVideoPost connected with the VideoPostData instance. Equal to static_cast<BaseVideoPost*>Get(). Provided for speed and convenience. Cinema 4D owns the pointed video post.
[in,out]vdThe volume data to use and modify. The caller owns the pointed volume data.
[in]sampleradiusThe caustics sample radius of the rendered materials.
[in]accuracyThe caustics sample count of the rendered material.
Returns
The surface caustics component.

§ ComputeVolumeCaustic()

virtual Vector ComputeVolumeCaustic ( BaseVideoPost node,
const Vector64 p,
Int32  cpu_index 
)
virtual

Called to calculate volume caustics information.
If VIDEOPOSTINFO_CAUSTICS is not set then ComputeDiffuseCaustic is not needed. If this flag is set then ComputeDiffuseCaustic is required.

Warning
No OS calls are allowed during this function. Doing so could cause a crash, since it can be called in a multi-processor context.
Parameters
[in]nodeThe BaseVideoPost connected with the VideoPostData instance. Equal to static_cast<BaseVideoPost*>Get(). Provided for speed and convenience. Cinema 4D owns the pointed video post.
[in]pThe rendered point for volume caustics.
[in]cpu_indexThe index of the current running thread (0 to cpu_cnt-1), so that the volume caustics calculation get this information passed.
Returns
The volume caustics component.

§ CreateRay()

virtual void CreateRay ( Ray dst,
Float  x,
Float  y 
)
virtual

Called to let the video post create its own rays for the pixel at (x, y).

Note
VIDEOPOSTINFO_CUSTOMLENS needs to be returned by GetRenderInfo to use this feature.
Parameters
[in,out]dstThe custom ray. Change the ray's parameters.
[in]xThe X coordinate of the pixel.
[in]yThe Y coordinate of the pixel.

§ CreateExtendedRay()

virtual void CreateExtendedRay ( Ray dst,
Float  x,
Float  y,
Float  lensx,
Float  lensy,
Float  time 
)
virtual

Called to let the video post create its own extended ray for the pixel at (x, y).
Improved version of CreateRay giving additional information for motion blur and DOF that some custom lens plugins might want to use to correctly compute these effects.

Note
VIDEOPOSTINFO_CUSTOMLENS needs to be returned by GetRenderInfo() to use this feature.
Parameters
[in,out]dstThe custom ray. Change the ray's parameters.
[in]xThe X coordinate of the pixel.
[in]yThe Y coordinate of the pixel.
[in]lensxThe lens X. (Value is in the range 0.0 to 1.0.)
[in]lensyThe lens Y. (Value is in the range 0.0 to 1.0.)
[in]timeThe time. (Value is in the range 0.0 to 1.0.)

§ StereoGetCameraCountEditor()

virtual Int32 StereoGetCameraCountEditor ( BaseVideoPost node,
BaseDocument doc,
BaseDraw bd 
)
virtual

Called to return the number of stereoscopic editor cameras.

Parameters
[in]nodeThe BaseVideoPost connected with the VideoPostData instance. Equal to static_cast<BaseVideoPost*>Get(). Provided for speed and convenience. Cinema 4D owns the pointed video post.
[in]docThe active document. The caller owns the pointed document.
[in]bdThe active editor view. The caller owns the pointed view.
Returns
The number of stereoscopic cameras.

§ StereoGetCameraCountRenderer()

virtual Int32 StereoGetCameraCountRenderer ( BaseVideoPost node,
BaseDocument doc,
RenderData rd 
)
virtual

Called to return the number of stereoscopic cameras used for rendering.

Parameters
[in]nodeThe BaseVideoPost connected with the VideoPostData instance. Equal to static_cast<BaseVideoPost*>Get(). Provided for speed and convenience. Cinema 4D owns the pointed video post.
[in]docThe active document. The caller owns the pointed document.
[in]rdThe current render settings. The caller owns the pointed render data.
Returns
The number of stereoscopic cameras.

§ StereoGetCameraInfo()

virtual Bool StereoGetCameraInfo ( BaseVideoPost node,
BaseDocument doc,
BaseDraw bd,
RenderData rd,
Int32  index,
StereoCameraInfo info 
)
virtual

Called to fill the information structure for each stereoscopic camera.

Parameters
[in]nodeThe BaseVideoPost connected with the VideoPostData instance. Equal to static_cast<BaseVideoPost*>Get(). Provided for speed and convenience. Cinema 4D owns the pointed video post.
[in]docThe active document. The caller owns the pointed document.
[in]bdThe active editor view. The caller owns the pointed view.
[in]rdThe current render settings. The caller owns the pointed render data.
[in]indexThe index of the stereoscopic camera: 0 <= index < StereoGetCameraCountRenderer()
[out]infoFill with the stereoscopic camera information.
Returns
true if successful, otherwise false.

§ StereoGetSceneHookID()

virtual Int32 StereoGetSceneHookID ( BaseVideoPost node)
virtual

Called to return a scene hook ID to store mouse coordinates used for drawing.

Parameters
[in]nodeThe BaseVideoPost connected with the VideoPostData instance. Equal to static_cast<BaseVideoPost*>Get(). Provided for speed and convenience. Cinema 4D owns the pointed video post.
Returns
The plugin ID of the scene hook.

§ StereoMergeImages()

virtual Bool StereoMergeImages ( BaseVideoPost node,
BaseBitmap dest,
const BaseBitmap *const *  source,
Int32  cnt,
const BaseContainer settings,
COLORSPACETRANSFORMATION  transform 
)
virtual

Called to merge the stereo images for rendering.
settings contains the stereoscopic render settings.

Parameters
[in]nodeThe BaseVideoPost connected with the VideoPostData instance. Equal to static_cast<BaseVideoPost*>Get(). Provided for speed and convenience. Cinema 4D owns the pointed video post.
[out]destThe destination bitmap to fill with the merged stereoscopic image.
[in]sourceThe array of stereoscopic images.
[in]cntThe number of stereoscopic images in source.
[in]settingsThe stereoscopic render settings container.
[in]transformThe color space transformation: COLORSPACETRANSFORMATION
Returns
true if successful, otherwise false.

§ RenderEngineCheck()

virtual Bool RenderEngineCheck ( BaseVideoPost node,
Int32  id 
)
virtual

Called to enable video post effects only for certain render engines or to allow only certain render settings tabs, e.g. if the video post is a render engine itself.
For example to disable the video post effect for the Cineman renderer:

Bool MyEffect::RenderEngineCheck(BaseVideoPost *node, Int32 id)
{
// The following render engines are not supported by this effect
return false;
return true;
}

Here is how to disable some render settings tabs for a render engine plugin:

Bool MyRenderer::RenderEngineCheck(BaseVideoPost *node, Int32 id)
{
switch (id)
{
return false;
}
return true;
}
Parameters
[in]nodeThe BaseVideoPost connected with the VideoPostData instance. Equal to static_cast<BaseVideoPost*>Get(). Provided for speed and convenience. Cinema 4D owns the pointed video post.
[in]idThe ID of the render engine or the render settings tab: RENDERSETTING_STATICTAB
Returns
true to enable the render engine or render settings tab passed to id, false to disable it.

§ SetDiffuseWeight()

virtual void SetDiffuseWeight ( BaseVideoPost node,
Int32  cpu_index,
Float  weight 
)
virtual

Called to send the current ray weight. The call is made right before each ComputeDiffuseGI().
Each ray has now a weight associated with it, basically how important the ray is. All primary rays start with a weight of 1.0 and as they get "split" their weight is reduced.
For example computing GI within blurry reflections would use much lower weight, assuming each blurry reflection uses 8 samples then the weight would be 1/8 so the GI would only use now 1/8 of the original rays.

Note
If the video post computes its own GI it should store and use that weight to improve/reduce the quality/time of the GI calculation.
Parameters
[in]nodeThe BaseVideoPost connected with the VideoPostData instance. Equal to static_cast<BaseVideoPost*>Get(). Provided for speed and convenience. Cinema 4D owns the pointed video post.
[in]cpu_indexThe index of the current running thread (0 to cpu_cnt-1). The thread index is important as each thread might use different weight.
[in]weightThe current ray weight.

§ NetFrameInit()

virtual Bool NetFrameInit ( BaseVideoPost node,
BaseDocument doc,
RenderJob job,
Int32  assignedClients,
const NetRenderData renderData,
MultipassBitmap frameBmp,
BaseThread bt,
Int32 realdepth 
)
virtual

Called to setup all the data for a NET frame.

Note
These methods are run on the server. The client does not receive any special calls and does not have any hookups but the NET context parameter is simply not nullptr.
Parameters
[in]nodeThe BaseVideoPost connected with the VideoPostData instance. Equal to static_cast<BaseVideoPost*>Get(). Provided for speed and convenience. Cinema 4D owns the pointed video post.
[in]docThe active document. The caller owns the pointed document.
[in]jobThe render job. The caller owns the pointed render job.
[in]assignedClientsThe initial client count at the moment the frame is about to be rendered.
[in]renderDataThe NET render data. The caller owns the pointed render data.
[in]frameBmpThe multipass bitmap where the resulting images are expected to be stored (important if the image is to be shown in the Picture Viewer).
[in]btThe render thread. The caller owns the pointed thread.
[out]realdepthAssign the real image depth.
Returns
true if successful, otherwise false.

§ NetFrameFree()

virtual void NetFrameFree ( BaseVideoPost node)
virtual

Called to clean up after rendering the NET frame has been done.

Note
These methods are run on the server. The client does not receive any special calls and does not have any hookups but the NET context parameter is simply not nullptr.
Parameters
[in]nodeThe BaseVideoPost connected with the VideoPostData instance. Equal to static_cast<BaseVideoPost*>Get(). Provided for speed and convenience. Cinema 4D owns the pointed video post.

§ NetFrameMessage()

virtual Bool NetFrameMessage ( BaseVideoPost node,
const C4DUuid remoteUuid,
const NetRenderBuffer data,
NetRenderBuffer result 
)
virtual

Called to send NET frame messages.

Note
These methods are run on the server. The client does not receive any special calls and does not have any hookups but the NET context parameter is simply not nullptr.
Parameters
[in]nodeThe BaseVideoPost connected with the VideoPostData instance. Equal to static_cast<BaseVideoPost*>Get(). Provided for speed and convenience. Cinema 4D owns the pointed video post.
[in]remoteUuidThe client uuid.
[in]dataThe data the client sends to the server.
[in]resultAn optional return value if the client is expecting a result.
Returns
true if successful, otherwise false.

§ NetCreateBuffer()

virtual Bool NetCreateBuffer ( BaseVideoPost node,
VideoPostStruct vps,
Int32  x,
Int32  y,
Int32  sizex,
Int32  sizey,
Int32 id,
Int32 subid 
)
virtual

Called to to create specialized buffers e.g. for Normal and Position passes.

Note
These methods are run on the server. The client does not receive any special calls and does not have any hookups but the NET context parameter is simply not nullptr. If the video post has the flag VIDEOPOSTINFO_NETCREATEBUFFER set NetCreateBuffer will be called by the server.
The plugin should then update the multipass buffer, and return the buffer id and subid.
Parameters
[in]nodeThe BaseVideoPost connected with the VideoPostData instance. Equal to static_cast<BaseVideoPost*>Get(). Provided for speed and convenience. Cinema 4D owns the pointed video post.
[in]vpsThe video post information. The caller owns the pointed video post struct.
[in]xThe X position in the buffer that needs to be filled.
[in]yThe Y position in the buffer that needs to be filled.
[in]sizexThe width in the buffer that needs to be filled.
[in]sizeyThe height in the buffer that needs to be filled.
[in]idAssign the buffer ID.
[in]subidAssign the buffer sub-ID.
Returns
true if successful, otherwise false.

§ GetMotionInfo()

virtual Bool GetMotionInfo ( BaseVideoPost node,
MotionInfo info 
)
virtual

Called to return the motion blur information.

Since
R17.032
Parameters
[in]nodeThe BaseVideoPost connected with the VideoPostData instance. Equal to static_cast<BaseVideoPost*>Get(). Provided for speed and convenience. Cinema 4D owns the pointed video post.
[in]infoThe motion blur information.
Returns
true if successful, otherwise false.