FnUsdAbstractionLib 15.1.6
All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Pages
usg::ShaderPrim Class Reference
Inheritance diagram for usg::ShaderPrim:
usg::Prim

Public Member Functions

 ShaderPrim ()
 Default ctor builds an empty (invalid) prim.
 
 ShaderPrim (const Prim &)
 
 ShaderPrim (const ShaderPrim &)
 
bool validate () override
 
void initializeSchemaSourceInfo (const ShaderDesc &shader_desc)
 
bool setIdentifierAttr (const std::string &identifier)
 
std::string getIdentifier () const
 Get the value of the 'info:id' attribute, if there is one.
 
bool setImplementationSourceAttr (const std::string &implementation_source)
 
std::string getImplementationSource () const
 Get the value of the 'info:implementationSource' attribute, if there is one.
 
bool setSourceAssetAttr (const Path &source_assert_path, const std::string &source_namespace="")
 
std::string getSourceAsset (const std::string &source_namespace="") const
 
bool setSourceCodeAttr (const std::string &source_code, const std::string &source_namespace="")
 
std::string getSourceCode (const std::string &source_namespace="") const
 
bool connectInputs (const ShaderDesc &source_shader_desc, const Path &material_path)
 
bool defineOutputs (const ShaderDesc &source_shader_desc, const Path &material_path)
 
const SchemaDescriptiongetSchema () const
 
ShaderDesccreateShaderDesc (const MaterialPrim &parent_material, bool debug_info=false) const
 
- Public Member Functions inherited from usg::Prim
 Prim ()
 Abstraction handle for casting to UsdPrim.
 
 Prim (const Prim &)
 
Primoperator= (const Prim &)
 
bool operator== (const Prim &b) const
 Equality - are the two Prims the same object or not? Compares the underlying Prim::Impls.
 
bool operator!= (const Prim &b) const
 
bool operator< (const Prim &b) const
 
bool isValid () const
 Returns true if Prim::Impl is valid (has a valid object binding.)
 
 operator bool () const
 
bool isSdfPrim () const
 
bool isUsdPrim () const
 
virtual bool validate ()
 
class Prim::SpecPrimHandle * getSdfPrimSpec (int usd_version)
 
const class Prim::SpecPrimHandle * getSdfPrimSpec (int usd_version) const
 
class Prim::UsdPrimHandle * getUsdPrim (int usd_version)
 
const class Prim::UsdPrimHandle * getUsdPrim (int usd_version) const
 
const std::string & getName () const
 Returns the name of the prim.
 
Token getNameToken () const
 Returns the name of the prim as a token.
 
Path getPath () const
 Returns the path of the prim.
 
Token getTypeName () const
 Returns the name of the type of the prim.
 
Prim getParent () const
 Return this prim's parent prim. Returns an invalid prim if this is a root prim.
 
bool isA (const Token &typeName) const
 Returns true if the prim is an instance of the given type.
 
bool isA (const Type &type) const
 Returns true if the prim is an instance of the given type. This is faster than the isA method which takes a Token as it avoids a type name lookup.
 
template<class T >
bool isA () const
 Returns true if the prim is an instance of a schema.
 
bool hasApi (const Token &typeName) const
 Returns true if the prim has the given API.
 
bool hasApi (const Token &typeName, const Token &instanceName) const
 Returns true if the prim has the given multiple-apply schema API.
 
void setActive (bool active)
 
bool isActive () const
 
bool clearActive ()
 
bool isDefined () const
 
bool isModel () const
 
bool isGroup () const
 
bool isAbstract () const
 
bool hasDefiningSpecifier () const
 
bool hasArcs () const
 
bool isPseudoRoot () const
 Returns true if the prim is the pseudo root - ie '/'.
 
void setKind (const Token &kind)
 
Token getKind () const
 
void setInstanceable (bool instanceable)
 
bool getInstanceable () const
 
bool isInstanceable () const
 
bool isInstance () const
 
bool isInstanceProxy () const
 
bool isPrototype () const
 
bool isInPrototype () const
 
bool hasPayload () const
 
bool isLoaded () const
 
void load (bool loadWithDescendants=true) const
 
void unload () const
 
void setVisibility (bool active, fdk::TimeValue time=fdk::defaultTimeValue())
 
bool visibility (fdk::TimeValue time=fdk::defaultTimeValue()) const
 
void setVisible (bool active, fdk::TimeValue time=fdk::defaultTimeValue())
 
bool isVisible (fdk::TimeValue time=fdk::defaultTimeValue()) const
 
bool addAppliedSchema (const Token &schemaName, ListPosition position=ListPosition::PrependBack)
 
void setCreator (const Token &creator)
 Sets the name of the app that created this prim.
 
Token creatorApp () const
 Gets the name of the app that created this prim.
 
bool isCreator (const Token &creator) const
 True if creator is the prim's creator app.
 
void setMetadata (const std::string &key, const Value &value)
 Sets the metadata (or field for sdfPrim) value of given key.
 
void setCustomData (const std::string &key, const Value &value)
 Sets the custom data value of given key.
 
bool getCustomData (const std::string &key, Value &value) const
 Retrieves the custom data value for the key. Returns true if it exists.
 
Value getCustomData (const std::string &key) const
 Returns a valid value if the custom data exists for the key.
 
bool hasCustomData (const std::string &key) const
 Checks whether the prim has custom data for the key.
 
void removeCustomData (const std::string &key)
 Erases the custom data for the key.
 
bool getMetadata (const Token &key, Value &value) const
 Return this prim's metadata given a key token.
 
Attribute createIntrinsicAttr (const Token &name, Value::Type type, TimeVariability variability_hint=TimeVariability::Uniform)
 
Attribute createCustomAttr (const Token &name, Value::Type type, TimeVariability variability_hint=TimeVariability::Uniform)
 
Attribute createAttr (const Token &name, Value::Type type, bool is_custom=false, TimeVariability variability_hint=TimeVariability::Varying, const Value &defaultValue=Value())
 
template<typename T >
Attribute setAttr (const Token &name, const T &v, const fdk::TimeValue &time=fdk::defaultTimeValue())
 
Attribute getAttr (const Token &name) const
 If the named attribute exists on the Prim returns it otherwise return an empty (invalid) Attribute object.
 
bool getAttr (const Token &name, Attribute &attr) const
 
std::vector< TokengetAttributes () const
 Returns the list of attributes.
 
Attribute copyAttr (const Prim &fromPrim, const Token &name, fdk::TimeValue time)
 Copy the attribute from another prim at the given time.
 
virtual bool applyAttributeOverrides (const ShaderDesc &schema_desc, bool skip_connected=true)
 
Relationship createRelationship (const Token &name, bool custom=false)
 Creates and returns an empty relationship.
 
Relationship getRelationship (const Token &name) const
 
bool getRelationship (const Token &name, Relationship &rel) const
 
size_t getRelationships (std::vector< const char * > &relationships) const
 Fills in the list of relationship names, returning the number of relationship.
 
void addInherit (const Path &path, ListPosition position=ListPosition::PrependBack)
 Adds a inherit path to the prim's inherits list.
 
void removeInherit (const Path &path)
 Removes a inherit path to the prim's inherits list.
 
void setInherits (const PathArray &paths)
 Sets inherits to the prim's inherits list. If empty list is given, clears the inherits list.
 
void addReference (const std::string &identifier, const Path &path, ListPosition position=ListPosition::PrependBack, double offset=0.0, double scale=1.0)
 Adds a reference to the prim's reference list.
 
void removeReference (const std::string &identifier, const Path &path, double offset=0.0, double scale=1.0)
 Removes a reference to the prim's reference list.
 
void setReferences (const std::vector< std::pair< std::string, Path > > &identifierAndPaths, double offset=0.0, double scale=1.0)
 Sets references to the prim's reference list. If empty list is given, clears the reference list.
 
void addPayload (const std::string &identifier, const Path &path, ListPosition position=ListPosition::PrependBack, double offset=0.0, double scale=1.0)
 Adds a payload to the prim's payload list.
 
void removePayload (const std::string &identifier, const Path &path, double offset=0.0, double scale=1.0)
 Removes a payload to the prim's payload list.
 
void setPayloads (const std::vector< std::pair< std::string, Path > > &identifierAndPaths, double offset=0.0, double scale=1.0)
 Sets payloads to the prim's payload list. If empty list is given, clears the payload list.
 
void addSpecialize (const Path &path, ListPosition position=ListPosition::PrependBack)
 Adds a specialize path to the prim's specializes list.
 
void removeSpecialize (const Path &path)
 Removes a specialize path to the prim's specializes list.
 
void setSpecializes (const PathArray &paths)
 Sets specializes to the prim's specializes list. If empty list is given, clears the specializes list.
 
void addVariantSet (const std::string &variantSetName, ListPosition position=ListPosition::PrependBack)
 Adds a variant set to the prim.
 
void addVariant (const std::string &variantSetName, const std::string &variantName)
 Adds a variant to a variant set.
 
void setVariantSelection (const std::string &variantSetName, const std::string &selection)
 Sets the variant selection for a variant set.
 
std::vector< std::string > getVariantSets () const
 Returns the list of variant sets authored on the prim.
 
std::vector< std::string > getVariants (const std::string &variantSetName) const
 Returns the list of variants for a variant set on this prim.
 
std::string getVariantSelection (const std::string &variantSetName) const
 Returns the variant selection for a given variant set.
 
size_t getChildren (std::vector< Prim > &children, bool activeOnly=true, bool includeClasses=false, bool includeOverrides=true) const
 
LayerRef getDefiningLayer () const
 Returns a possible layer which defined this prim. This returns the layer containing the first "def" for the prim.
 
virtual void print (const char *prefix, std::ostream &o, bool printAttribContents=false) const
 Debugging - prints some key info about the prim to a stream.
 
 Prim (const Prim::Impl &)
 
Prim::Impl * impl ()
 
const Prim::Impl * impl () const
 
void invalidate ()
 Remove the binding making the Prim invalid. For internal use only!
 

Static Public Member Functions

static bool isValidPrim (const Prim &prim)
 Returns true if prim is a ShaderPrim subclass.
 
static ShaderPrim defineInLayer (const ShaderDesc &source_shader_desc, const LayerRef &layer, const Path &material_path)
 
static ShaderPrim updateInLayer (const ShaderDesc &source_shader_desc, const LayerRef &layer, const Path &material_path)
 
static ShaderPrim updateInStage (const ShaderDesc &source_shader_desc, const StageRef &stage, const Path &material_path)
 
static ShaderPrim defineInLayer (const LayerRef &layer, const Path &path)
 
static ShaderPrim getInStage (const StageRef &stage, const Path &path)
 
static const SchemaDescriptionretrieveShaderSchema (const Prim &prim)
 
- Static Public Member Functions inherited from usg::Prim
static Prim defineInLayer (const LayerRef &layer, const Path &path, const Token &typeName)
 
static Prim overrideInLayer (const LayerRef &layer, const Path &path, const Token &typeName)
 
static void createMissingParents (const StageRef &referenceStage, const LayerRef &layer, const Path &path, const Token &parentPrimType=GeomTokens.types.Scope)
 

Protected Attributes

const SchemaDescription_schema
 Reference to the const ShaderSchema registry node.
 
- Protected Attributes inherited from usg::Prim
std::unique_ptr< Prim::Impl, void(*)(Prim::Impl *)> _pImpl
 

Additional Inherited Members

- Public Types inherited from usg::Prim
enum  {
  ActiveFlag = 0 , LoadedFlag , ModelFlag , GroupFlag ,
  AbstractFlag , DefinedFlag , HasDefiningSpecifierFlag , InstanceFlag ,
  PayloadFlag , ClipsFlag , DeadFlag , PrototypeFlag ,
  InstanceProxyFlag , PseudoRootFlag , NumFlags
}
 
using FlagMask = uint32_t
 
using FlagsPredicate = FlagsSet
 
- Static Public Attributes inherited from usg::Prim
static constexpr FlagMask IsActiveMask = 0x0001
 
static constexpr FlagMask IsLoadedMask = 0x0002
 
static constexpr FlagMask IsModelMask = 0x0004
 
static constexpr FlagMask IsGroupMask = 0x0008
 
static constexpr FlagMask IsAbstractMask = 0x0010
 
static constexpr FlagMask IsDefinedMask = 0x0020
 
static constexpr FlagMask HasDefiningSpecifierMask = 0x0040
 
static constexpr FlagMask IsInstanceMask = 0x0080
 
static constexpr FlagMask PayloadMask = 0x0100
 
static constexpr FlagMask ClipsMask = 0x0200
 
static constexpr FlagMask DeadMask = 0x0400
 
static constexpr FlagMask PrototypeMask = 0x0800
 
static constexpr FlagMask InstanceProxyMask = 0x1000
 
static constexpr FlagMask PseudoRootMask = 0x2000
 
static const FlagsPredicate IsActive
 
static const FlagsPredicate IsLoaded
 
static const FlagsPredicate IsModel
 
static const FlagsPredicate IsGroup
 
static const FlagsPredicate IsAbstract
 
static const FlagsPredicate IsDefined
 
static const FlagsPredicate HasDefiningSpecifier
 
static const FlagsPredicate IsInstance
 
static const FlagsPredicate IncludeInstanceProxies
 
static const FlagsPredicate DefaultPredicate
 Default filtering mask. Same as (IsActive && IsDefined && IsLoaded && -IsAbstract)
 
static const FlagsPredicate AllPrimsPredicate
 No filtering mask (no flags enabled.) Same as FlagsSet().
 
- Protected Member Functions inherited from usg::Prim
void initialize (const Prim &prim)
 

Constructor & Destructor Documentation

◆ ShaderPrim()

usg::ShaderPrim::ShaderPrim ( const Prim )

Attempt to cast Prim to a ShaderPrim. ShaderPrim will be invalid if not successful. If a valid ShaderPrim the SchemaDescription will be retrieved from it.

Member Function Documentation

◆ validate()

bool usg::ShaderPrim::validate ( )
overridevirtual

Call this after construction to validate this Prim as a ShaderPrim type, returning true if it's still valid. If not the Prim::Impl will be invalidated and isValid() will then return false.

Reimplemented from usg::Prim.

◆ initializeSchemaSourceInfo()

void usg::ShaderPrim::initializeSchemaSourceInfo ( const ShaderDesc shader_desc)

Convenience function that sets the 'info:implementationSource' and 'info:id' properties to the correct values for the ShaderPrim contents to be loaded, typically via a Schema plugin.

Specifically 'info:implementationSource' is set to 'id' so that the plugin system will look at the value of 'info:id', and 'info:id' is set to the name of the Schema name to load.

◆ setIdentifierAttr()

bool usg::ShaderPrim::setIdentifierAttr ( const std::string &  identifier)

Assign/override the 'info:id' attribute, returning true on success. The identifer string should come from a valid SchemaDescription found in the shader registry.

◆ setImplementationSourceAttr()

bool usg::ShaderPrim::setImplementationSourceAttr ( const std::string &  implementation_source)

Assign/override the 'info:implementationSource' attribute, returning true on success.

The implementation source attribute is a hint to the Hydra material resolution system for where the shader code comes from. Current options are: 'id': Attribute 'token info:id' value is used to determine the shader source from the shader registry entry.

'sourceAsset': Attribute 'asset info:<namespace>:sourceAsset' value defines the path to the shader source code asset. ie 'asset info:glslfx:sourceAsset = ./foo.glslfx@' defines the path to a file containing the glslfx implementation source code.

TODO: An optional 'token info:sourceAsset:subIdentifier' attribute is also taken into account but it's unclear how this is different then 'info:<namespace>:sourceAsset'...

'sourceCode': Attribute 'string info:sourceCode' provides the shader source code text.

For more information reference the 'shaderDefs.usda' example shader schema, currently at pxr/usd/usdHydra/shaders/ in the Pixar USD source package.

◆ setSourceAssetAttr()

bool usg::ShaderPrim::setSourceAssetAttr ( const Path source_assert_path,
const std::string &  source_namespace = "" 
)

Assign/override the 'info:<source_namespace>:sourceAsset' attribute, returning true on success.

◆ setSourceCodeAttr()

bool usg::ShaderPrim::setSourceCodeAttr ( const std::string &  source_code,
const std::string &  source_namespace = "" 
)

Assign/override the 'info:<source_namespace>:sourceCode' attribute, returning true on success.

◆ defineInLayer() [1/2]

static ShaderPrim usg::ShaderPrim::defineInLayer ( const ShaderDesc source_shader_desc,
const LayerRef &  layer,
const Path material_path 
)
static

Defines a Shader prim in the owner Layer, returning a constructed reference.

If a valid ShaderDesc is provided the ShaderSchema will be retrieved from it and any overrides or connections it contains will be created in the resulting ShaderPrim by this method calling ShaderPrim::connectInputs() and ShaderPrim::applyInputOverrides().

◆ updateInLayer()

static ShaderPrim usg::ShaderPrim::updateInLayer ( const ShaderDesc source_shader_desc,
const LayerRef &  layer,
const Path material_path 
)
static

Retrieves an editable Shader prim in the Layer and applies any changes from the provided ShaderDesc to it.

If a valid ShaderDesc is provided the path to the ShaderPrim will be constructed from the material_path + the ShaderDesc's material-relative path.

◆ updateInStage()

static ShaderPrim usg::ShaderPrim::updateInStage ( const ShaderDesc source_shader_desc,
const StageRef &  stage,
const Path material_path 
)
static

Retrieves an editable Shader prim in the owner Stage and applies any changes from the provided ShaderDesc to it.

If a valid ShaderDesc is provided the path to the ShaderPrim will be constructed from the material_path + the ShaderDesc's material-relative path.

◆ defineInLayer() [2/2]

static ShaderPrim usg::ShaderPrim::defineInLayer ( const LayerRef &  layer,
const Path path 
)
static

Defines a Material prim in the owner Layer, returning a constructed reference.

◆ getInStage()

static ShaderPrim usg::ShaderPrim::getInStage ( const StageRef &  stage,
const Path path 
)
static

Retrieves an editable Shader prim in the owner Stage, or an invalid one if none exists.

◆ connectInputs()

bool usg::ShaderPrim::connectInputs ( const ShaderDesc source_shader_desc,
const Path material_path 
)

Retrieve any connections from the ShaderDesc and write them to ShaderPrim input Attributes. Returns false if any underlying error occurred.

◆ defineOutputs()

bool usg::ShaderPrim::defineOutputs ( const ShaderDesc source_shader_desc,
const Path material_path 
)

Retrieve any output properties from the ShaderDesc and write them to ShaderPrim output Attributes. Returns false if any underlying error occurred.

◆ getSchema()

const SchemaDescription * usg::ShaderPrim::getSchema ( ) const
inline

Return the ShaderSchema class, if one has successfully retrieved from the 'info:id' attribute.

◆ retrieveShaderSchema()

static const SchemaDescription * usg::ShaderPrim::retrieveShaderSchema ( const Prim prim)
static

Use the prim's 'info:id' attribute to retrieve the shader's schema from the registry. Returns null if 'info:id' doesn't exist or its value isn't found in registry.

◆ createShaderDesc()

ShaderDesc * usg::ShaderPrim::createShaderDesc ( const MaterialPrim parent_material,
bool  debug_info = false 
) const

Create a ShaderDesc instance from this ShaderPrim, filling in any overrides or connections present. The parent_material prim is used to create a relative path for the resulting ShaderDesc inside the material group.

Uses the 'info:id' for the registry id, then converts each property override and connection.

Enabling debug will print shader creation debug info to terminal (cout).

Calling code takes ownership of ShaderDesc allocation.



©2025 The Foundry Visionmongers, Ltd. All Rights Reserved.
www.foundry.com