24 #ifndef PXR_IMAGING_HD_RETAINEDDATASOURCE_H 25 #define PXR_IMAGING_HD_RETAINEDDATASOURCE_H 29 #include "pxr/imaging/hd/api.h" 30 #include "pxr/imaging/hd/dataSource.h" 35 PXR_NAMESPACE_OPEN_SCOPE
57 const HdDataSourceBaseHandle *values);
62 const HdDataSourceBaseHandle &value1);
67 const HdDataSourceBaseHandle &value1,
69 const HdDataSourceBaseHandle &value2);
74 const HdDataSourceBaseHandle &value1,
76 const HdDataSourceBaseHandle &value2,
78 const HdDataSourceBaseHandle &value3);
83 const HdDataSourceBaseHandle &value1,
85 const HdDataSourceBaseHandle &value2,
87 const HdDataSourceBaseHandle &value3,
89 const HdDataSourceBaseHandle &value4);
94 const HdDataSourceBaseHandle &value1,
96 const HdDataSourceBaseHandle &value2,
98 const HdDataSourceBaseHandle &value3,
100 const HdDataSourceBaseHandle &value4,
102 const HdDataSourceBaseHandle &value5);
107 const HdDataSourceBaseHandle &value1,
109 const HdDataSourceBaseHandle &value2,
111 const HdDataSourceBaseHandle &value3,
113 const HdDataSourceBaseHandle &value4,
115 const HdDataSourceBaseHandle &value5,
117 const HdDataSourceBaseHandle &value6);
138 HdSampledDataSource::Time startTime,
139 HdSampledDataSource::Time endTime,
140 std::vector<HdSampledDataSource::Time> *outSampleTimes)
override 163 template <
typename T>
174 HdSampledDataSource::Time startTime,
175 HdSampledDataSource::Time endTime,
176 std::vector<HdSampledDataSource::Time> *outSampleTimes)
override 199 template <
typename T>
218 template <
typename T>
222 HD_DECLARE_DATASOURCE(HdRetainedTypedMultisampledDataSource<T>);
224 HdRetainedTypedMultisampledDataSource(
226 HdSampledDataSource::Time *sampleTimes,
230 HdSampledDataSource::Time startTime,
231 HdSampledDataSource::Time endTime,
232 std::vector<HdSampledDataSource::Time> *outSampleTimes)
override;
239 T
GetTypedValue(HdSampledDataSource::Time shutterOffset)
override;
242 typedef std::pair<HdSampledDataSource::Time, T> _SamplePair;
246 template <
typename T>
247 HdRetainedTypedMultisampledDataSource<T>::HdRetainedTypedMultisampledDataSource(
249 HdSampledDataSource::Time *sampleTimes,
256 for (
size_t i = 0; i < count; ++i) {
257 _sampledValues.emplace_back(sampleTimes[i], sampleValues[i]);
261 template <
typename T>
263 HdRetainedTypedMultisampledDataSource<T>::GetContributingSampleTimesForInterval(
264 HdSampledDataSource::Time startTime,
265 HdSampledDataSource::Time endTime,
266 std::vector<HdSampledDataSource::Time> *outSampleTimes)
268 if (_sampledValues.size() < 2) {
272 if (outSampleTimes) {
273 outSampleTimes->clear();
276 outSampleTimes->reserve(_sampledValues.size());
278 for (
const auto & iter : _sampledValues) {
279 outSampleTimes->push_back(iter.first);
286 template <
typename T>
288 HdRetainedTypedMultisampledDataSource<T>::GetTypedValue(
289 HdSampledDataSource::Time shutterOffset)
291 if (_sampledValues.empty()) {
295 const HdSampledDataSource::Time epsilon = 0.0001;
297 for (
size_t i = 0, e = _sampledValues.size(); i < e; ++i) {
299 const HdSampledDataSource::Time & sampleTime = _sampledValues[i].first;
301 if (sampleTime > shutterOffset) {
305 return _sampledValues[i].second;
309 const HdSampledDataSource::Time delta =
310 sampleTime - shutterOffset;
313 if (delta < epsilon) {
314 return _sampledValues[i].second;
320 const HdSampledDataSource::Time previousDelta =
321 shutterOffset - _sampledValues[i - 1].first;
323 if (previousDelta <= delta) {
324 return _sampledValues[i - 1].second;
326 return _sampledValues[i].second;
330 if (fabs(sampleTime - shutterOffset) < epsilon) {
331 return _sampledValues[i].second;
337 return _sampledValues.back().second;
357 HdDataSourceBaseHandle *values);
363 HdDataSourceBaseHandle
GetElement(
size_t element)
override;
376 HdSampledDataSourceHandle
377 HdCreateTypedRetainedDataSource(
VtValue const &v);
379 PXR_NAMESPACE_CLOSE_SCOPE
381 #endif // PXR_IMAGING_HD_RETAINEDDATASOURCE_H A retained container data source is a data source whose data are available locally,...
A datasource representing indexed data.
HD_API size_t GetNumElements() override
Return the number of elements in this datasource.
void reserve(size_type newCapacity)
Reserve storage for newCapacity entries.
virtual bool GetContributingSampleTimesForInterval(Time startTime, Time endTime, std::vector< Time > *outSampleTimes)=0
Given a shutter window of interest (startTime and endTime relative to the current frame),...
VtValue GetValue(HdSampledDataSource::Time shutterOffset) override
Returns the value of this data source at frame-relative time shutterOffset.
A datasource representing structured (named, hierarchical) data, for example a geometric primitive or...
A retained data source version of HdVectorDataSource.
virtual VtValue GetValue(Time shutterOffset)=0
Returns the value of this data source at frame-relative time shutterOffset.
HD_API HdDataSourceBaseHandle GetElement(size_t element) override
Return the element at position element in this datasource.
Token for efficient comparison, assignment, and hashing of known strings.
A retained data source for sampled data.
Similar to HdRetainedSampledDataSource but provides strongly typed semantics.
A datasource representing a concretely-typed sampled value.
T GetTypedValue(HdSampledDataSource::Time shutterOffset) override
Returns the value of this data source at frame-relative time shutterOffset, as type T.
virtual T GetTypedValue(Time shutterOffset)=0
Returns the value of this data source at frame-relative time shutterOffset, as type T.
bool GetContributingSampleTimesForInterval(HdSampledDataSource::Time startTime, HdSampledDataSource::Time endTime, std::vector< HdSampledDataSource::Time > *outSampleTimes) override
Given a shutter window of interest (startTime and endTime relative to the current frame),...
bool GetContributingSampleTimesForInterval(HdSampledDataSource::Time startTime, HdSampledDataSource::Time endTime, std::vector< HdSampledDataSource::Time > *outSampleTimes) override
Given a shutter window of interest (startTime and endTime relative to the current frame),...
Provides a container which may hold any type, and provides introspection and iteration over array typ...
VtValue GetValue(HdSampledDataSource::Time shutterOffset) override
Returns the value of this data source at frame-relative time shutterOffset.
A datasource representing time-sampled values.