FnUsdAbstractionLib 15.1.6
|
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 SchemaDescription * | getSchema () const |
ShaderDesc * | createShaderDesc (const MaterialPrim &parent_material, bool debug_info=false) const |
![]() | |
Prim () | |
Abstraction handle for casting to UsdPrim. | |
Prim (const Prim &) | |
Prim & | operator= (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< Token > | getAttributes () 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 SchemaDescription * | retrieveShaderSchema (const Prim &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. | |
![]() | |
std::unique_ptr< Prim::Impl, void(*)(Prim::Impl *)> | _pImpl |
Additional Inherited Members | |
![]() | |
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 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(). | |
![]() | |
void | initialize (const Prim &prim) |
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.
|
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.
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.
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.
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.
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.
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.
|
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().
|
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.
|
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.
|
static |
Defines a Material prim in the owner Layer, returning a constructed reference.
|
static |
Retrieves an editable Shader prim in the owner Stage, or an invalid one if none exists.
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.
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.
|
inline |
Return the ShaderSchema class, if one has successfully retrieved from the 'info:id' attribute.
|
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.
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. |