43 inline float gaussian(
float x_squared)
46 return (
float)exp(scale * x_squared);
55 template<
class T,
int nChan>
60 for (
int vi = k.
v1; vi != k.
v2; vi++) {
64 float U = (float)x1 - k.
u;
65 float V = (
float)vi - k.
v;
66 float DQ = k.
A*(2.0f*U+1.0f)+k.
B*V;
67 float Q = k.
A*U*U + (k.
B*U + k.
C*V)*V;
68 T* p = (T*)data + (vi * k.
rowlen + x1) * nTxChan;
69 T* pEnd = p + (x2-x1)*nTxChan;
70 for (; p < pEnd; p += nTxChan) {
72 float weight = gaussian(Q)*k.
wscale;
83 template<
class T,
int nChan>
87 for (
int vi = k.
v1; vi != k.
v2; vi++) {
91 float U = (float)x1 - k.
u;
92 float V = (
float)vi - k.
v;
93 float DQ = k.
A*(2.0f*U+1.0f)+k.
B*V;
94 float Q = k.
A*U*U + (k.
B*U + k.
C*V)*V;
95 T* p = (T*)data + (vi * k.
rowlen + x1) * nTxChan;
96 T* pEnd = p + (x2-x1)*nTxChan;
97 for (; p < pEnd; p += nTxChan) {
99 float weight = gaussian(Q)*k.
wscale;
113 float DDQ = 2.0f*k.
A;
114 for (
int vi = k.
v1; vi != k.
v2; vi++) {
118 float U = (float)x1 - k.
u;
119 float V = (
float)vi - k.
v;
120 float DQ = k.
A*(2.0f*U+1.0f)+k.
B*V;
121 float Q = k.
A*U*U + (k.
B*U + k.
C*V)*V;
122 T* p = (T*)data + (vi * k.
rowlen + x1) * nTxChan;
123 T* pEnd = p + (x2-x1)*nTxChan;
124 for (; p < pEnd; p += nTxChan) {
126 float weight = gaussian(Q)*k.
wscale;
141 ApplyN<uint8_t>, ApplyN<uint16_t>, ApplyN<PtexHalf>, ApplyN<float>,
142 Apply<uint8_t,1>, Apply<uint16_t,1>, Apply<PtexHalf,1>, Apply<float,1>,
143 Apply<uint8_t,2>, Apply<uint16_t,2>, Apply<PtexHalf,2>, Apply<float,2>,
144 Apply<uint8_t,3>, Apply<uint16_t,3>, Apply<PtexHalf,3>, Apply<float,3>,
145 Apply<uint8_t,4>, Apply<uint16_t,4>, Apply<PtexHalf,4>, Apply<float,4>,
148 ApplyN<uint8_t>, ApplyN<uint16_t>, ApplyN<PtexHalf>, ApplyN<float>,
149 ApplyS<uint8_t,1>, ApplyS<uint16_t,1>, ApplyS<PtexHalf,1>, ApplyS<float,1>,
150 ApplyS<uint8_t,2>, ApplyS<uint16_t,2>, ApplyS<PtexHalf,2>, ApplyS<float,2>,
151 ApplyS<uint8_t,3>, ApplyS<uint16_t,3>, ApplyS<PtexHalf,3>, ApplyS<float,3>,
152 ApplyS<uint8_t,4>, ApplyS<uint16_t,4>, ApplyS<PtexHalf,4>, ApplyS<float,4>,
160 for (
int vi =
v1; vi !=
v2; vi++) {
164 float U = (float)x1 -
u;
165 float V = (float)vi -
v;
166 float DQ =
A*(2.0f*U+1.0f)+
B*V;
167 float Q =
A*U*U + (
B*U +
C*V)*V;
168 for (
int x = x1; x < x2; x++) {
void applyConst(float *dst, void *data, DataType dt, int nChan)
DataType
Type of data stored in texture file.
Triangle filter kernel iterator (in texel coords)
static ApplyFn applyFunctions[40]
void(* ApplyFn)(PtexTriangleKernelIter &k, float *dst, void *data, int nChan, int nTxChan)
static const float PtexTriangleKernelWidth
Half-precision floating-point type.
static void applyConst(float weight, float *dst, void *data, Ptex::DataType dt, int nChan)