7#ifndef PXR_IMAGING_PLUGIN_HD_EMBREE_SAMPLER_H
8#define PXR_IMAGING_PLUGIN_HD_EMBREE_SAMPLER_H
13#include "pxr/imaging/hd/enums.h"
14#include "pxr/imaging/hd/vtBufferSource.h"
28PXR_NAMESPACE_OPEN_SCOPE
45#define TYPE_HELPER(T,type)\
46template<> inline HdTupleType \
47HdEmbreeTypeHelper::GetTupleType<T>() { return HdTupleType{type, 1}; }
49 TYPE_HELPER(
bool, HdTypeBool)
50 TYPE_HELPER(
char, HdTypeInt8)
51 TYPE_HELPER(
short, HdTypeInt16)
52 TYPE_HELPER(
unsigned short, HdTypeUInt16)
53 TYPE_HELPER(
int, HdTypeInt32)
54 TYPE_HELPER(
GfVec2i, HdTypeInt32Vec2)
55 TYPE_HELPER(
GfVec3i, HdTypeInt32Vec3)
56 TYPE_HELPER(
GfVec4i, HdTypeInt32Vec4)
57 TYPE_HELPER(
unsigned int, HdTypeUInt32)
58 TYPE_HELPER(
float, HdTypeFloat)
59 TYPE_HELPER(
GfVec2f, HdTypeFloatVec2)
60 TYPE_HELPER(
GfVec3f, HdTypeFloatVec3)
61 TYPE_HELPER(
GfVec4f, HdTypeFloatVec4)
62 TYPE_HELPER(
double, HdTypeDouble)
63 TYPE_HELPER(
GfVec2d, HdTypeDoubleVec2)
64 TYPE_HELPER(
GfVec3d, HdTypeDoubleVec3)
65 TYPE_HELPER(
GfVec4d, HdTypeDoubleVec4)
68 TYPE_HELPER(
GfQuath, HdTypeHalfFloatVec4)
104 template<
typename T>
bool Sample(
int index, T* value)
const {
105 return Sample(index,
static_cast<void*
>(value),
106 HdEmbreeTypeHelper::GetTupleType<T>());
142 virtual bool Sample(
unsigned int element,
float u,
float v,
void* value,
146 template<
typename T>
bool Sample(
unsigned int element,
float u,
float v,
148 return Sample(element, u, v,
static_cast<void*
>(value),
149 HdEmbreeTypeHelper::GetTupleType<T>());
165PXR_NAMESPACE_CLOSE_SCOPE
Stores a 4x4 matrix of double elements.
Stores a 4x4 matrix of float elements.
Basic type: a quaternion, a complex number with a real coefficient and three imaginary coefficients,...
Basic type for a vector of 2 double components.
Basic type for a vector of 2 float components.
Basic type for a vector of 2 int components.
Basic type for a vector of 3 double components.
Basic type for a vector of 3 float components.
Basic type for a vector of 3 int components.
Basic type for a vector of 4 double components.
Basic type for a vector of 4 float components.
Basic type for a vector of 4 int components.
A utility class that knows how to sample an element from a type-tagged buffer (like HdVtBufferSource)...
bool Sample(int index, void *value, HdTupleType dataType) const
Sample the buffer at element index index, and write the sample to value.
HdEmbreeBufferSampler(HdVtBufferSource const &buffer)
The constructor takes a reference to a buffer source.
An abstract base class that knows how to sample a primvar signal given a ray hit coordinate: an <elem...
virtual ~HdEmbreePrimvarSampler()=default
Default destructor.
virtual bool Sample(unsigned int element, float u, float v, void *value, HdTupleType dataType) const =0
Sample the primvar at element index index and local basis coordinates u and v, writing the sample to ...
HdEmbreePrimvarSampler()=default
Default constructor.
static bool _Interpolate(void *out, void **samples, float *weights, size_t sampleCount, HdTupleType dataType)
Utility function for derived classes: combine multiple samples with blend weights: out = sum_i { samp...
A utility class that helps map between C++ types and Hd type tags.
static HdTupleType GetTupleType()
Return the HdTupleType corresponding to the given C++ type.
char PrimvarTypeContainer[sizeof(GfMatrix4d)]
Define a type that can hold one sample of any primvar.
An implementation of HdBufferSource where the source data value is a VtValue.
HdTupleType represents zero, one, or more values of the same HdType.