7 #ifndef PXR_IMAGING_HD_DATASOURCE_H
8 #define PXR_IMAGING_HD_DATASOURCE_H
29 #define HD_DECLARE_DATASOURCE_ABSTRACT(type) \
30 using Handle = std::shared_ptr<type>; \
31 using AtomicHandle = Handle; \
32 static Handle AtomicLoad(AtomicHandle &ptr) { \
33 return std::atomic_load(&ptr); \
35 static void AtomicStore(AtomicHandle &ptr, const Handle &v) { \
36 std::atomic_store(&ptr, v); \
38 static bool AtomicCompareExchange(AtomicHandle &ptr, \
39 AtomicHandle &expected, \
40 const Handle &desired) { \
41 return std::atomic_compare_exchange_strong(&ptr, &expected, desired); \
43 static Handle Cast(const HdDataSourceBase::Handle &v) { \
44 return std::dynamic_pointer_cast<type>(v); \
53 #define HD_DECLARE_DATASOURCE(type) \
54 HD_DECLARE_DATASOURCE_ABSTRACT(type) \
55 template <typename ... Args> \
56 static Handle New(Args&& ... args) { \
57 return Handle(new type(std::forward<Args>(args) ... )); \
63 #define HD_DECLARE_DATASOURCE_INITIALIZER_LIST_NEW(type, T) \
64 static Handle New(std::initializer_list<T> initList) { \
65 return Handle(new type(initList)); \
68 #define HD_DECLARE_DATASOURCE_HANDLES(type) \
69 using type##Handle = type::Handle; \
70 using type##AtomicHandle = type::AtomicHandle;
117 static HdDataSourceBaseHandle
Get(
143 virtual HdDataSourceBaseHandle
GetElement(
size_t element) = 0;
183 std::vector<Time> * outSampleTimes) = 0;
198 template <
typename T>
211 if constexpr (VtIsKnownValueType<T>()) {
244 return dataSource ? dataSource->_GetDefaultValue() :
VtValue {};
260 template <
class T,
class ...>
class Visitor,
261 typename ...TypeArgs,
266 const HdSampledDataSourceHandle& dataSource, FnArgs&&...
args)
270 std::forward<FnArgs>(
args)...);
280 template <
class T,
template <
class...>
class,
class ...>
class Visitor,
281 template <
class...>
class Tmpl,
282 typename ...TypeArgs,
287 const HdSampledDataSourceHandle& dataSource, FnArgs&&...
args)
291 std::forward<FnArgs>(
args)...);
300 template <
typename...>
class DataSource,
301 class UntypedDataSource>
304 template <
class ...Args>
307 if constexpr (std::is_same_v<T, VtValue>) {
308 if constexpr (std::is_void_v<UntypedDataSource>) {
312 return UntypedDataSource::New(std::forward<Args>(
args)...);
316 return DataSource<T>::New(std::forward<Args>(
args)...);
326 template <
typename...>
class DataSource,
327 class UntypedDataSource =
void,
329 HdDataSourceBaseHandle
331 const HdSampledDataSourceHandle& dataSource, Args&&...
args)
335 dataSource, std::forward<Args>(
args)...);
343 const HdSampledDataSourceHandle *inputDataSources,
346 std::vector<HdSampledDataSource::Time> * outSampleTimes);
353 HdDataSourceBaseHandle,
354 int indentLevel = 0);
363 #endif // PXR_IMAGING_HD_DATASOURCE_H
virtual HdDataSourceBaseHandle GetElement(size_t element)=0
virtual VtValue _GetDefaultValue() override
static HdDataSourceBaseHandle Visit(Args &&...args)
HdDataSourceBaseHandle HdCopySampledDataSourceType(const HdSampledDataSourceHandle &dataSource, Args &&...args)
#define PXR_NAMESPACE_OPEN_SCOPE
auto VtVisitValueType(VtValue const &value, FnArgs &&...args)
HD_DECLARE_DATASOURCE_ABSTRACT(HdContainerDataSource)
static VtValue GetDefaultValue(const HdSampledDataSourceHandle &dataSource)
virtual TfTokenVector GetNames()=0
virtual HdDataSourceBaseHandle Get(const TfToken &name)=0
HD_DECLARE_DATASOURCE_ABSTRACT(HdTypedSampledDataSource< T >)
auto HdVisitSampledDataSourceType(const HdSampledDataSourceHandle &dataSource, FnArgs &&...args)
virtual size_t GetNumElements()=0
std::vector< TfToken > TfTokenVector
Convenience types.
#define HD_DECLARE_DATASOURCE_HANDLES(type)
GLuint const GLchar * name
HD_DECLARE_DATASOURCE_ABSTRACT(HdSampledDataSource)
HD_API bool HdGetMergedContributingSampleTimesForInterval(size_t count, const HdSampledDataSourceHandle *inputDataSources, HdSampledDataSource::Time startTime, HdSampledDataSource::Time endTime, std::vector< HdSampledDataSource::Time > *outSampleTimes)
Merges contributing sample times from several data sources.
virtual VtValue GetValue(Time shutterOffset)=0
IMATH_NAMESPACE::V2f IMATH_NAMESPACE::Box2i std::string this attribute is obsolete as of OpenEXR v3 float
HD_DECLARE_DATASOURCE_ABSTRACT(HdVectorDataSource)
#define HD_DECLARE_DATASOURCE_ABSTRACT(type)
virtual T GetTypedValue(Time shutterOffset)=0
#define PXR_NAMESPACE_CLOSE_SCOPE
**If you just want to fire and args
virtual HD_API ~HdDataSourceBase()=0
virtual bool GetContributingSampleTimesForInterval(Time startTime, Time endTime, std::vector< Time > *outSampleTimes)=0
HD_API void HdDebugPrintDataSource(std::ostream &, HdDataSourceBaseHandle, int indentLevel=0)
Print a datasource to a stream, for debugging/testing.
HD_DECLARE_DATASOURCE(HdBlockDataSource)
virtual HD_API VtValue _GetDefaultValue()