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"
32#include "pxr/usd/sdf/pathExpression.h"
37PXR_NAMESPACE_OPEN_SCOPE
59 const HdDataSourceBaseHandle *values);
64 const HdDataSourceBaseHandle &value1);
69 const HdDataSourceBaseHandle &value1,
71 const HdDataSourceBaseHandle &value2);
76 const HdDataSourceBaseHandle &value1,
78 const HdDataSourceBaseHandle &value2,
80 const HdDataSourceBaseHandle &value3);
85 const HdDataSourceBaseHandle &value1,
87 const HdDataSourceBaseHandle &value2,
89 const HdDataSourceBaseHandle &value3,
91 const HdDataSourceBaseHandle &value4);
96 const HdDataSourceBaseHandle &value1,
98 const HdDataSourceBaseHandle &value2,
100 const HdDataSourceBaseHandle &value3,
102 const HdDataSourceBaseHandle &value4,
104 const HdDataSourceBaseHandle &value5);
109 const HdDataSourceBaseHandle &value1,
111 const HdDataSourceBaseHandle &value2,
113 const HdDataSourceBaseHandle &value3,
115 const HdDataSourceBaseHandle &value4,
117 const HdDataSourceBaseHandle &value5,
119 const HdDataSourceBaseHandle &value6);
140 HdSampledDataSource::Time startTime,
141 HdSampledDataSource::Time endTime,
142 std::vector<HdSampledDataSource::Time> *outSampleTimes)
override
176 HdSampledDataSource::Time startTime,
177 HdSampledDataSource::Time endTime,
178 std::vector<HdSampledDataSource::Time> *outSampleTimes)
override
224 HD_DECLARE_DATASOURCE(HdRetainedTypedMultisampledDataSource<T>);
226 HdRetainedTypedMultisampledDataSource(
228 HdSampledDataSource::Time *sampleTimes,
232 HdSampledDataSource::Time startTime,
233 HdSampledDataSource::Time endTime,
234 std::vector<HdSampledDataSource::Time> *outSampleTimes)
override;
241 T
GetTypedValue(HdSampledDataSource::Time shutterOffset)
override;
244 typedef std::pair<HdSampledDataSource::Time, T> _SamplePair;
249HdRetainedTypedMultisampledDataSource<T>::HdRetainedTypedMultisampledDataSource(
251 HdSampledDataSource::Time *sampleTimes,
258 for (
size_t i = 0; i < count; ++i) {
259 _sampledValues.emplace_back(sampleTimes[i], sampleValues[i]);
265HdRetainedTypedMultisampledDataSource<T>::GetContributingSampleTimesForInterval(
266 HdSampledDataSource::Time startTime,
267 HdSampledDataSource::Time endTime,
268 std::vector<HdSampledDataSource::Time> *outSampleTimes)
270 if (_sampledValues.size() < 2) {
274 if (outSampleTimes) {
275 outSampleTimes->clear();
278 outSampleTimes->reserve(_sampledValues.size());
280 for (
const auto & iter : _sampledValues) {
281 outSampleTimes->push_back(iter.first);
290HdRetainedTypedMultisampledDataSource<T>::GetTypedValue(
291 HdSampledDataSource::Time shutterOffset)
293 if (_sampledValues.empty()) {
297 const HdSampledDataSource::Time epsilon = 0.0001;
299 for (
size_t i = 0, e = _sampledValues.size(); i < e; ++i) {
301 const HdSampledDataSource::Time & sampleTime = _sampledValues[i].first;
303 if (sampleTime > shutterOffset) {
307 return _sampledValues[i].second;
311 const HdSampledDataSource::Time delta =
312 sampleTime - shutterOffset;
315 if (delta < epsilon) {
316 return _sampledValues[i].second;
322 const HdSampledDataSource::Time previousDelta =
323 shutterOffset - _sampledValues[i - 1].first;
325 if (previousDelta <= delta) {
326 return _sampledValues[i - 1].second;
328 return _sampledValues[i].second;
332 if (fabs(sampleTime - shutterOffset) < epsilon) {
333 return _sampledValues[i].second;
339 return _sampledValues.back().second;
359 const HdDataSourceBaseHandle *values);
378HdSampledDataSourceHandle
379HdCreateTypedRetainedDataSource(
VtValue const &v);
384HdDataSourceBaseHandle
385HdMakeStaticCopy(HdDataSourceBaseHandle
const &ds);
390HdContainerDataSourceHandle
391HdMakeStaticCopy(HdContainerDataSourceHandle
const &ds);
393PXR_NAMESPACE_CLOSE_SCOPE
A datasource representing structured (named, hierarchical) data, for example a geometric primitive or...
A retained container data source is a data source whose data are available locally,...
A retained data source for sampled data.
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),...
VtValue GetValue(HdSampledDataSource::Time shutterOffset) override
Returns the value of this data source at frame-relative time shutterOffset.
A retained data source version of HdVectorDataSource.
HD_API HdDataSourceBaseHandle GetElement(size_t element) override
Return the element at position element in this datasource.
HD_API size_t GetNumElements() override
Return the number of elements in this datasource.
Similar to HdRetainedSampledDataSource but provides strongly typed semantics.
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),...
VtValue GetValue(HdSampledDataSource::Time shutterOffset) override
Returns the value of this data source at frame-relative time shutterOffset.
T GetTypedValue(HdSampledDataSource::Time shutterOffset) override
Returns the value of this data source at frame-relative time shutterOffset, as type T.
A datasource representing time-sampled values.
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),...
virtual VtValue GetValue(Time shutterOffset)=0
Returns the value of this data source at frame-relative time shutterOffset.
A datasource representing a concretely-typed sampled value.
virtual T GetTypedValue(Time shutterOffset)=0
Returns the value of this data source at frame-relative time shutterOffset, as type T.
A datasource representing indexed data.
This is a small-vector class with local storage optimization, the local storage can be specified via ...
void reserve(size_type newCapacity)
Reserve storage for newCapacity entries.
Token for efficient comparison, assignment, and hashing of known strings.
Provides a container which may hold any type, and provides introspection and iteration over array typ...