00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef _GRARBFUNC_H_
00024 #define _GRARBFUNC_H_
00025
00026 #include <VrSigProc.h>
00027
00040 template<class iType, class oType>
00041 class GrArbFunc : public VrSigProc {
00042 public:
00043 GrArbFunc (oType (*f)(const iType&) ) :
00044 VrSigProc (1, sizeof (iType), sizeof (oType)),
00045 func(f) {}
00046
00047 virtual const char *name() { return "GrArbFunc"; }
00048
00049 virtual int work(VrSampleRange output, void *o[],
00050 VrSampleRange inputs[], void *i[]);
00051
00052 protected:
00053 oType (*func)(const iType&);
00054 };
00055
00056 template<class iType, class oType> int
00057 GrArbFunc<iType,oType>::work(VrSampleRange output, void *ao[],
00058 VrSampleRange inputs[], void *ai[])
00059 {
00060 iType **i = ((iType **)ai);
00061 oType **o = ((oType **)ao);
00062 unsigned int size = output.size;
00063
00064 for (unsigned int x = 0; x < size; x++)
00065 o[0][x] = (*func)(reinterpret_cast<const iType &>(i[0][x]));
00066
00067
00068 return output.size;
00069 }
00070
00071
00072 #endif