7#ifndef PXR_IMAGING_HD_RETAINEDDATASOURCE_H
8#define PXR_IMAGING_HD_RETAINEDDATASOURCE_H
10#include "pxr/base/vt/value.h"
13#include "pxr/imaging/hd/api.h"
14#include "pxr/imaging/hd/dataSource.h"
16#include "pxr/usd/sdf/pathExpression.h"
25PXR_NAMESPACE_OPEN_SCOPE
47 const HdDataSourceBaseHandle *values);
52 const HdDataSourceBaseHandle &value1);
57 const HdDataSourceBaseHandle &value1,
59 const HdDataSourceBaseHandle &value2);
64 const HdDataSourceBaseHandle &value1,
66 const HdDataSourceBaseHandle &value2,
68 const HdDataSourceBaseHandle &value3);
73 const HdDataSourceBaseHandle &value1,
75 const HdDataSourceBaseHandle &value2,
77 const HdDataSourceBaseHandle &value3,
79 const HdDataSourceBaseHandle &value4);
84 const HdDataSourceBaseHandle &value1,
86 const HdDataSourceBaseHandle &value2,
88 const HdDataSourceBaseHandle &value3,
90 const HdDataSourceBaseHandle &value4,
92 const HdDataSourceBaseHandle &value5);
97 const HdDataSourceBaseHandle &value1,
99 const HdDataSourceBaseHandle &value2,
101 const HdDataSourceBaseHandle &value3,
103 const HdDataSourceBaseHandle &value4,
105 const HdDataSourceBaseHandle &value5,
107 const HdDataSourceBaseHandle &value6);
125 HdSampledDataSource::Time startTime,
126 HdSampledDataSource::Time endTime,
127 std::vector<HdSampledDataSource::Time> *outSampleTimes)
override
139 : _value(
std::move(value))
161 HdSampledDataSource::Time startTime,
162 HdSampledDataSource::Time endTime,
163 std::vector<HdSampledDataSource::Time> *outSampleTimes)
override
185 return std::allocate_shared<HdRetainedTypedSampledDataSource<T>>(
214 HdSampledDataSource::Time,
215 HdSampledDataSource::Time,
216 std::vector<HdSampledDataSource::Time>*)
override
232 static Handle New(
const bool& value);
252 HD_DECLARE_DATASOURCE(HdRetainedTypedMultisampledDataSource<T>);
254 HdRetainedTypedMultisampledDataSource(
256 HdSampledDataSource::Time *sampleTimes,
259 bool GetContributingSampleTimesForInterval(
260 HdSampledDataSource::Time startTime,
261 HdSampledDataSource::Time endTime,
262 std::vector<HdSampledDataSource::Time> *outSampleTimes)
override;
264 VtValue GetValue(HdSampledDataSource::Time shutterOffset)
override
266 return VtValue(GetTypedValue(shutterOffset));
269 T GetTypedValue(HdSampledDataSource::Time shutterOffset)
override;
272 typedef std::pair<HdSampledDataSource::Time, T> _SamplePair;
277HdRetainedTypedMultisampledDataSource<T>::HdRetainedTypedMultisampledDataSource(
279 HdSampledDataSource::Time *sampleTimes,
286 for (
size_t i = 0; i < count; ++i) {
287 _sampledValues.emplace_back(sampleTimes[i], sampleValues[i]);
293HdRetainedTypedMultisampledDataSource<T>::GetContributingSampleTimesForInterval(
294 HdSampledDataSource::Time startTime,
295 HdSampledDataSource::Time endTime,
296 std::vector<HdSampledDataSource::Time> *outSampleTimes)
298 if (_sampledValues.size() < 2) {
302 if (outSampleTimes) {
303 outSampleTimes->clear();
306 outSampleTimes->reserve(_sampledValues.size());
308 for (
const auto & iter : _sampledValues) {
309 outSampleTimes->push_back(iter.first);
318HdRetainedTypedMultisampledDataSource<T>::GetTypedValue(
319 HdSampledDataSource::Time shutterOffset)
321 if (_sampledValues.empty()) {
325 const HdSampledDataSource::Time epsilon = 0.0001;
327 for (
size_t i = 0, e = _sampledValues.size(); i < e; ++i) {
329 const HdSampledDataSource::Time & sampleTime = _sampledValues[i].first;
331 if (sampleTime > shutterOffset) {
335 return _sampledValues[i].second;
339 const HdSampledDataSource::Time delta =
340 sampleTime - shutterOffset;
343 if (delta < epsilon) {
344 return _sampledValues[i].second;
350 const HdSampledDataSource::Time previousDelta =
351 shutterOffset - _sampledValues[i - 1].first;
353 if (previousDelta <= delta) {
354 return _sampledValues[i - 1].second;
356 return _sampledValues[i].second;
360 if (fabs(sampleTime - shutterOffset) < epsilon) {
361 return _sampledValues[i].second;
367 return _sampledValues.back().second;
394 const HdDataSourceBaseHandle *values);
407HdSampledDataSourceHandle
408HdCreateTypedRetainedDataSource(
VtValue const &v);
413HdDataSourceBaseHandle
414HdMakeStaticCopy(HdDataSourceBaseHandle
const &ds);
419HdContainerDataSourceHandle
420HdMakeStaticCopy(HdContainerDataSourceHandle
const &ds);
422PXR_NAMESPACE_CLOSE_SCOPE
Provide architecture-specific memory-alignment information.
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...