7 #ifndef PXR_IMAGING_HD_TIME_SAMPLE_ARRAY_H
8 #define PXR_IMAGING_HD_TIME_SAMPLE_ARRAY_H
13 #include "pxr/base/vt/array.h"
26 return GfLerp(alpha, v0, v1);
35 return GfSlerp(
double(alpha), v0, v1);
45 for (
size_t i=0; i <
r.size(); ++i) {
66 if (numSamples == 0) {
84 }
else if (i == numSamples) {
86 return vs[numSamples-1];
87 }
else if (us[i] == us[i-1]) {
90 TF_WARN(
"HdResampleRawTimeSamples: overlapping samples at %f; "
91 "using first sample", us[i]);
95 float alpha = (u-us[i-1]) / (us[i]-us[i-1]);
104 template <
typename T>
110 const VtIntArray *is)
112 if (numSamples == 0) {
114 return std::pair<T, VtIntArray>(
T(), VtIntArray(0));
121 return std::pair<T, VtIntArray>(vs[i], is[i]);
129 return std::pair<T, VtIntArray>(vs[0], is[0]);
130 }
else if (i == numSamples) {
132 return std::pair<T, VtIntArray>(vs[numSamples-1], is[numSamples-1]);
133 }
else if (us[i] == us[i-1]) {
136 TF_WARN(
"HdResampleRawTimeSamples: overlapping samples at %f; "
137 "using first sample", us[i]);
138 return std::pair<T, VtIntArray>(vs[i-1], is[i-1]);
142 float alpha = (us[i]-u) / (us[i]-us[i-1]);
143 return std::pair<T, VtIntArray>(
159 const float * sampleTimes,
162 std::vector<float> * outSampleTimes);
169 template<
typename TYPE,
unsigned int CAPACITY>
192 virtual void Resize(
unsigned int newSize) {
212 for (
size_t i=0; i < box.
count; ++i) {
213 if (box.
values[i].template IsHolding<TYPE>() &&
214 box.
values[i].GetArraySize() > 0) {
226 const float startTime,
const float endTime,
227 std::vector<float> *
const outSampleTimes)
const
240 template<
typename TYPE,
unsigned int CAPACITY>
262 void Resize(
unsigned int newSize)
override {
283 for (
size_t i=0; i < box.
count; ++i) {
284 if (box.
values[i].template IsHolding<TYPE>() &&
285 box.
values[i].GetArraySize() > 0) {
300 #endif // PXR_IMAGING_HD_TIME_SAMPLE_ARRAY_H
void resize(size_type newSize, const value_type &v=value_type())
GLsizei GLenum const void * indices
HdTimeSampleArray(const HdTimeSampleArray &rhs)
TfSmallVector< float, CAPACITY > times
PXR_NAMESPACE_OPEN_SCOPE T HdResampleNeighbors(float alpha, const T &v0, const T &v1)
Resample two neighboring samples.
bool GetContributingSampleTimesForInterval(const float startTime, const float endTime, std::vector< float > *const outSampleTimes) const
See HdGetContributingSampleTimesForInterval.
TYPE Resample(float u) const
T GfLerp(double alpha, const T &a, const T &b)
GF_API GfQuatd GfSlerp(double alpha, const GfQuatd &q0, const GfQuatd &q1)
bool HdGetContributingSampleTimesForInterval(size_t count, const float *sampleTimes, float startTime, float endTime, std::vector< float > *outSampleTimes)
std::pair< TYPE, VtIntArray > ResampleIndexed(float u) const
bool UnboxFrom(HdTimeSampleArray< VtValue, CAPACITY > const &box)
GLfloat GLfloat GLfloat alpha
HdIndexedTimeSampleArray()
TfSmallVector< TYPE, CAPACITY > values
virtual void Resize(unsigned int newSize)
Resize the internal buffers.
void Resize(unsigned int newSize) override
Resize the internal buffers.
PXR_NAMESPACE_CLOSE_SCOPE PXR_NAMESPACE_OPEN_SCOPE
GLenum GLsizei GLsizei GLint * values
HdIndexedTimeSampleArray(const HdIndexedTimeSampleArray &rhs)
#define PXR_NAMESPACE_CLOSE_SCOPE
HdIndexedTimeSampleArray & operator=(const HdIndexedTimeSampleArray &rhs)
T HdResampleRawTimeSamples(float u, size_t numSamples, const float *us, const T *vs)
IMF_EXPORT int numSamples(int s, int a, int b)
TfSmallVector< VtIntArray, CAPACITY > indices
HdTimeSampleArray & operator=(const HdTimeSampleArray &rhs)
bool UnboxFrom(HdIndexedTimeSampleArray< VtValue, CAPACITY > const &box)