Files
UnrealEngine/Engine/Source/ThirdParty/MaterialX/MaterialX-1.38.10/source/MaterialXGenShader/GenUserData.h
2025-05-18 13:04:45 +08:00

62 lines
1.4 KiB
C++

//
// 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 <MaterialXGenShader/Export.h>
MATERIALX_NAMESPACE_BEGIN
class GenUserData;
/// Shared pointer to a GenUserData
using GenUserDataPtr = std::shared_ptr<GenUserData>;
/// Shared pointer to a constant GenUserData
using ConstGenUserDataPtr = std::shared_ptr<const GenUserData>;
/// @class GenUserData
/// Base class for custom user data needed during shader generation.
class MX_GENSHADER_API GenUserData : public std::enable_shared_from_this<GenUserData>
{
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 <class T> shared_ptr<T> asA()
{
return std::dynamic_pointer_cast<T>(getSelf());
}
/// Return this object cast to a templated type.
template <class T> shared_ptr<const T> asA() const
{
return std::dynamic_pointer_cast<const T>(getSelf());
}
protected:
GenUserData() { }
};
MATERIALX_NAMESPACE_END
#endif // MATERIALX_GENCONTEXT_H