#ifndef PtexTriangleFilter_h
#define PtexTriangleFilter_h
#include "Ptexture.h"
class PtexTriangleKernel;
class PtexTriangleKernelIter;
class PtexTriangleFilter : public PtexFilter, public Ptex
{
public:
PtexTriangleFilter(PtexTexture* tx, const PtexFilter::Options& opts ) :
_tx(tx), _options(opts), _result(0), _weight(0),
_firstChanOffset(0), _nchan(0), _ntxchan(0),
_dt((DataType)0) {}
virtual void release() { delete this; }
virtual void eval(float* result, int firstchan, int nchannels,
int faceid,
float u,
float v,
float uw1, float vw1, float uw2, float vw2,
float width,
float blur);
protected:
void buildKernel(PtexTriangleKernel& k,
float u,
float v,
float uw1, float vw1, float uw2, float vw2,
float width,
float blur, Res faceRes);
void splitAndApply(PtexTriangleKernel& k,
int faceid,
const Ptex::FaceInfo&
f);
void applyAcrossEdge(PtexTriangleKernel& k,
const Ptex::FaceInfo&
f,
int eid);
void apply(PtexTriangleKernel& k,
int faceid,
const Ptex::FaceInfo&
f);
void applyIter(PtexTriangleKernelIter& k, PtexFaceData*
dh);
virtual ~PtexTriangleFilter() {}
PtexTexture* _tx;
Options _options;
double* _result;
double _weight;
int _firstChanOffset;
int _nchan;
int _ntxchan;
DataType _dt;
};
#endif