// // Copyright Contributors to the MaterialX Project // SPDX-License-Identifier: Apache-2.0 // #ifndef MATERIALX_GENUSERDATA_H #define MATERIALX_GENUSERDATA_H /// @file /// User data base class for shader generation #include MATERIALX_NAMESPACE_BEGIN class GenUserData; /// Shared pointer to a GenUserData using GenUserDataPtr = std::shared_ptr; /// Shared pointer to a constant GenUserData using ConstGenUserDataPtr = std::shared_ptr; /// @class GenUserData /// Base class for custom user data needed during shader generation. class MX_GENSHADER_API GenUserData : public std::enable_shared_from_this { public: virtual ~GenUserData() { } /// Return a shared pointer for this object. GenUserDataPtr getSelf() { return shared_from_this(); } /// Return a shared pointer for this object. ConstGenUserDataPtr getSelf() const { return shared_from_this(); } /// Return this object cast to a templated type. template shared_ptr asA() { return std::dynamic_pointer_cast(getSelf()); } /// Return this object cast to a templated type. template shared_ptr asA() const { return std::dynamic_pointer_cast(getSelf()); } protected: GenUserData() { } }; MATERIALX_NAMESPACE_END #endif // MATERIALX_GENCONTEXT_H