7#ifndef PXR_USD_IMAGING_USD_SKEL_IMAGING_DATA_SOURCE_UTILS_H
8#define PXR_USD_IMAGING_USD_SKEL_IMAGING_DATA_SOURCE_UTILS_H
10#include "pxr/imaging/hd/dataSource.h"
12PXR_NAMESPACE_OPEN_SCOPE
23 using Handle = std::shared_ptr<T>;
27 if (
auto const result = std::atomic_load(&_data)) {
32 Handle desired = _Compute();
34 if (std::atomic_compare_exchange_strong(&_data, &expected, desired)) {
41 void Invalidate() { std::atomic_store(&_data, Handle()); }
44 virtual Handle _Compute() = 0;
51auto UsdSkelImagingGetTypedValue(
53 const HdSampledDataSource::Time shutterOffset = 0.0f)
54 ->
decltype(ds->GetTypedValue(0.0f))
59 return ds->GetTypedValue(shutterOffset);
62PXR_NAMESPACE_CLOSE_SCOPE
A thunk for shared pointers computing the result only once and using atomic operations to store the c...