The following interfaces can be used in the CustomRenderItemHandle:
The plug-ins can provide complex display in Nitrous using these interfaces.
Nitrous provides the following material classes that can be used by both the object and material plug-ins:
To use these materials to shade vertex buffers, the plug-ins need to initialize the handle in proper time. The plug-ins must make sure that the MeshRequiredStreams of the material handle and the vertex buffer format is consistent, and use the BaseMaterialHandle functions to draw. Following is an example:
// Use a material handle to draw something void XXXPlugin_CustomItem::Display(DrawContext& dc) { // Assuming that the material handle is properly initialized BaseMaterialHandle hMaterial; hMaterial.Activate(dc); int numPass = hMaterial.GetPassCount(dc); for (int i = 0; i < numPass; ++i) { // Assuming that the vertex buffer has a consistent format hMaterial.ActivatePass(dc, i); // Use IVirtualDevice to draw the vertex buffer } hMaterial.PassFinished(dc); hMaterial.Terminate(); }
Nitrous also provides a HLSLMaterialHandle class that allows plug-ins to use the DirectX effect. Plug-ins can directly use the DirectX effect string or file (*.fx) to initialize the material handle and use it as other material handles.
When Nitrous is in DirectX 9 (DX9) mode, this class only supports DX9 effects, and when Nitrous is in DirectX 11 (DX11) mode, this class only supports DX11 effects. Plug-ins can get the device capability through IVirtualDevice::FeatureLevel().