The FPInterface class hierarchy is such that static and mixin interfaces and interface descriptors each have their own types.
The FPInterface class continues to provide all the original method and predicate invocation functions required by an SDK-level client of the interface. A pure virtual method, GetDesc(), should be used to get the FPInterfaceDesc instance for the interface. The metadata definition and accessing methods and the metadata data members now all live in the FPInterfaceDesc.
All the original interface query methods in the API (such as Animatable::GetInterface( id), ClassDesc2::GetInterface(id), GetCOREInterface( id)) still return FPInterface pointers, so you would use GetDesc() in constructs like the following to get at an interface's metadata:
FPInterface* fpi = GetCOREInterface(FOO_INTERFACE); TCHAR* iname = fpi->GetDesc()->internal_name.data();
The FPInterface::GetDesc() method has a default implementation in FPInterfaceDesc(and so FPStaticInterface), simply returning 'this', since instances of these classes contain the metadata). FPMixinInterface subclasses provide implementations of GetDesc(), returning their associated FPInterfaceDesc instance.