00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __COP2_VexOp__
00022 #define __COP2_VexOp__
00023
00024 #include "COP2_API.h"
00025 #include <UT/UT_IntArray.h>
00026 #include <TIL/TIL_Defines.h>
00027 #include <VEX/VEX_Error.h>
00028 #include <OP/OP_Error.h>
00029
00030 #include "COP2_Context.h"
00031
00032 class VEX_Instance;
00033 class VEX_ProcArray;
00034 class VEX_LateBinding;
00035 class COP2_VexVariableMap;
00036 class COP2_VexAtlas;
00037 class cop2_VexData;
00038 class COP2_CookAreaInfo;
00039 class COP2_CookAreaList;
00040 class OP_Caller;
00041 class OP_Node;
00042
00043 class COP2_API COP2_VexOp
00044 {
00045 public:
00046
00047 void runVexSetup(TIL_Sequence &seq, OP_ERROR &error);
00048
00049 static TIL_FastLock &getVexLock();
00050
00051 protected:
00052 COP2_VexOp(COP2_Node *mycop);
00053 virtual ~COP2_VexOp();
00054
00055 void getVexContext(cop2_VexData *vdata,
00056 const TIL_Sequence &sequence,
00057 UT_PtrArray<const TIL_Sequence *> &in,
00058 const TIL_Plane *, int,
00059 float t, int xres,int yres, int thread);
00060
00061 OP_ERROR cookVex(COP2_Context &context,
00062 TIL_TileList *tiles,
00063 TIL_Sequence &seq);
00064
00065 void clearFunctions();
00066
00067 void getOutputAreas(COP2_Context &context,
00068 const TIL_Sequence &seq,
00069 COP2_CookAreaInfo &output_area,
00070 const COP2_CookAreaList &input_areas,
00071 COP2_CookAreaList &needed_areas);
00072
00073
00074 virtual void getVexScript(UT_String &string, float t,
00075 int thread) = 0;
00076 virtual bool isVexFilter() const = 0;
00077 bool isTimeRead() const { return myTimeRead; }
00078
00079 void compute(UT_String &script);
00080 void fillData(int x,int y, int xsize, int ysize,
00081 const TIL_Tile *rtile, float *rdata,
00082 const TIL_Tile *gtile, float *gdata,
00083 const TIL_Tile *btile, float *bdata,
00084 const TIL_Tile *atile, float *adata,
00085 const TIL_Tile *c1tile, float *c1data,
00086 const TIL_Tile *c2tile, float *c2data,
00087 const TIL_Tile *c3tile, float *c3data,
00088 const TIL_Tile *c4tile, float *c4data);
00089
00090 void extractData(int x,int y, int xsize, int ysize,
00091 TIL_Tile *rtile, const float *rdata,
00092 TIL_Tile *gtile, const float *gdata,
00093 TIL_Tile *btile, const float *bdata,
00094 TIL_Tile *atile, const float *adata,
00095 TIL_Tile *c1tile, const float *c1data,
00096 TIL_Tile *c2tile, const float *c2data,
00097 TIL_Tile *c3tile, const float *c3data,
00098 TIL_Tile *c4tile, const float *c4data);
00099
00100 void initRGBATiles(const TIL_TileList *tilelist,
00101 TIL_Tile *c1tile, TIL_Tile *c2tile,
00102 TIL_Tile *c3tile);
00103
00104 VEX_Instance *myStaticFunc;
00105 COP2_VexVariableMap *myStaticMap;
00106 UT_String myLastStaticFunction;
00107 VEXerrorHandler myPrevErrorHandler;
00108 VEXerrorHandler myPrevWarnHandler;
00109
00110 unsigned myNeedInputRGB : 1,
00111 myNeedInputA : 1,
00112 myNeedInputComp: 1,
00113 myWriteR : 1,
00114 myWriteG : 1,
00115 myWriteB : 1,
00116 myWriteA : 1,
00117 myWriteC1 : 1,
00118 myWriteC2 : 1,
00119 myWriteC3 : 1,
00120 myWriteC4 : 1,
00121 myTimeRead : 1;
00122
00123 COP2_VexAtlas *myAtlas;
00124 VEX_LateBinding *myBinding;
00125 UT_IntArray myExports;
00126 UT_IntArray myExportPlanes;
00127 COP2_Node *myCop;
00128 OP_VERSION myFuncVersion;
00129 };
00130
00131 class COP2_API cop2_VexData : public COP2_ContextData
00132 {
00133 public:
00134 cop2_VexData();
00135 virtual ~cop2_VexData();
00136
00137 virtual bool createPerThread() const { return true; }
00138 virtual bool createPerPlane() const { return true; }
00139
00140 void setCaller(OP_Node *caller);
00141
00142 VEX_ProcArray *myProc;
00143 VEX_Instance *myFunction;
00144 COP2_VexVariableMap *myMap;
00145 COP2_VexAtlas *myAtlas;
00146 OP_Caller *myCaller;
00147
00148 UT_String myLastFunction;
00149 bool myInitFlag;
00150 };
00151
00152 #endif