HDK
|
#include <parserPlugin.h>
Public Member Functions | |
NDR_API | NdrParserPlugin () |
virtual NDR_API | ~NdrParserPlugin () |
virtual NDR_API NdrNodeUniquePtr | Parse (const NdrNodeDiscoveryResult &discoveryResult)=0 |
virtual NDR_API const NdrTokenVec & | GetDiscoveryTypes () const =0 |
virtual NDR_API const TfToken & | GetSourceType () const =0 |
Public Member Functions inherited from TfWeakBase | |
TfWeakBase () | |
TfWeakBase (const TfWeakBase &) | |
const TfWeakBase & | __GetTfWeakBase__ () const |
const TfWeakBase & | operator= (const TfWeakBase &) |
void | EnableNotification2 () const |
TF_API void const * | GetUniqueIdentifier () const |
Static Public Member Functions | |
static NDR_API NdrNodeUniquePtr | GetInvalidNode (const NdrNodeDiscoveryResult &dr) |
Additional Inherited Members | |
Protected Member Functions inherited from TfWeakBase | |
~TfWeakBase () | |
TfRefPtr< Tf_Remnant > | _Register () const |
template<class T > | |
TfRefPtr< Tf_Remnant > | _Register (T *tempRmnt) const |
bool | _HasRemnant () const |
Interface for parser plugins.
Parser plugins take a NdrNodeDiscoveryResult
from the discovery process and creates a full NdrNode
instance (or, in the case of a real-world scenario, a specialized node that derives from NdrNode
). The parser that is selected to run is ultimately decided by the registry, and depends on the NdrNodeDiscoveryResult
's discoveryType
member. A parser plugin's GetDiscoveryTypes()
method is how this link is made. If a discovery result has a discoveryType
of 'foo', and SomeParserPlugin
has 'foo' included in its GetDiscoveryTypes()
return value, SomeParserPlugin
will parse that discovery result.
Another kind of 'type' within the parser plugin is the 'source type'. The discovery type simply acts as a way to link a discovery result to a parser plugin. On the other hand, a 'source type' acts as an umbrella type that groups all of the discovery types together. For example, if a plugin handled discovery types 'foo', 'bar', and 'baz' (which are all related because they are all handled by the same parser), they may all be grouped under one unifying source type. This type is available on the node via NdrNode::GetSourceType()
.
There are three steps to creating a parser plugin:
sdrOsl
. The Parse()
method should return the specialized node that derives from NdrNode
(and this node should also be constructed with its specialized properties). Examples of a specialized node and property class are SdrShaderNode
and SdrShaderProperty
. In the same folder as your plugin, create a plugInfo.json
file. This file must be formatted like so, substituting YOUR_LIBRARY_NAME
, YOUR_CLASS_NAME
, and YOUR_DISPLAY_NAME
:
The SDR ships with one parser plugin, the SdrOslParserPlugin
. Take a look at its plugInfo.json file for example values for YOUR_LIBRARY_NAME
, YOUR_CLASS_NAME
, and YOUR_DISPLAY_NAME
. If multiple parser plugins exist in the same folder, you can continue adding additional plugins under the Types
key in the JSON. More detailed information about the plugInfo.json format can be found in the documentation for the plug
library (in pxr/base).
Definition at line 125 of file parserPlugin.h.
NDR_API NdrParserPlugin::NdrParserPlugin | ( | ) |
|
virtual |
|
pure virtual |
Returns the types of nodes that this plugin can parse.
"Type" here is the discovery type (in the case of files, this will probably be the file extension, but in other systems will be data that can be determined during discovery). This type should only be used to match up a NdrNodeDiscoveryResult
to its parser plugin; this value is not exposed in the node's API.
Implemented in SdrOslParserPlugin, and UsdShadeShaderDefParserPlugin.
|
static |
Gets an invalid node based on the discovery result provided. An invalid node is a node that has no properties, but may have basic data found during discovery.
Returns the source type that this parser operates on.
A source type is the most general type for a node. The parser plugin is responsible for parsing all discovery results that have the types declared under GetDiscoveryTypes()
, and those types are collectively identified as one "source type".
Implemented in SdrOslParserPlugin, and UsdShadeShaderDefParserPlugin.
|
pure virtual |
Takes the specified NdrNodeDiscoveryResult
instance, which was a result of the discovery process, and generates a new NdrNode
. The node's name, source type, and family must match.
Implemented in SdrOslParserPlugin, and UsdShadeShaderDefParserPlugin.