00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __IMG_FileTTMap__
00020 #define __IMG_FileTTMap__
00021
00022 #include <UT/UT_Vector4.h>
00023 #include <UT/UT_FilterType.h>
00024 #include <UT/UT_Filter.h>
00025 #include "IMG_API.h"
00026 #include "IMG_File.h"
00027
00028 class UT_Filter;
00029 class UT_FilterWindow;
00030 class UT_Options;
00031 class IMG_TTMipSampler;
00032 class IMG_Raster;
00033 class TBF_Channel;
00034
00035 class img_DSMPixelHandle;
00036
00037
00038
00039 typedef enum {
00040 IMG_TT_DEEP_DISCRETE = 0,
00041 IMG_TT_DEEP_LINEAR = 1
00042 } IMG_TT_DEEP_INTERP;
00043
00044 class IMG_API IMG_TTFilterInfo {
00045 public:
00046 IMG_TTFilterInfo();
00047 IMG_TTFilterInfo(const IMG_TTFilterInfo &rhs);
00048 ~IMG_TTFilterInfo();
00049
00050
00051
00052 const char *getChannelName() const { return myChannelName; }
00053
00054
00055 int getChannelIndex() const { return myChannelIndex; }
00056
00057
00058 void setChannelName(const char *channel);
00059
00060 void setChannelIndex(int i) { myChannelIndex = i; }
00061
00062 void setFilter(UT_FilterType ftype,
00063 float x, float y);
00064 void setXFilter(UT_FilterType ftype);
00065 void setYFilter(UT_FilterType ftype);
00066 void setFilterWidths(float x, float y);
00067 void setFilterBlurs(float x, float y);
00068 void setMipInterpolate(int onoff);
00069 void setWrap(UT_FilterWrap uwrap, UT_FilterWrap vwrap,
00070 const UT_Vector4 &border);
00071 void setDeepInterp(IMG_TT_DEEP_INTERP interp);
00072 void setZSkew(float zskew) { myZSkew = zskew; }
00073 void swapBorder(UT_Vector4 &b, int ncomponents=4);
00074
00075 const UT_Filter *getXFilter() const { return myXFilter; }
00076 const UT_Filter *getYFilter() const { return myYFilter; }
00077
00078 bool getMipInterpolate() const { return myInterp; }
00079 fpreal getXWidth() const { return myXWidth; }
00080 fpreal getYWidth() const { return myYWidth; }
00081 fpreal getXBlur() const { return myXBlur; }
00082 fpreal getYBlur() const { return myYBlur; }
00083
00084 float getXsupport() const { return myXFilter->getSupport(); }
00085 float getYsupport() const { return myYFilter->getSupport(); }
00086 float zskew() const { return myZSkew; }
00087
00088 public:
00089 UT_String myChannelName;
00090 UT_Filter *myXFilter, *myYFilter;
00091 float myXWidth, myYWidth;
00092 UT_FilterWrap myUWrap, myVWrap;
00093 UT_Vector4 myBorder;
00094 int myInterp;
00095 IMG_TT_DEEP_INTERP myDeepInterp;
00096 int myChannelIndex;
00097 float myXBlur, myYBlur;
00098 float myZSkew;
00099 bool myOwnFilter;
00100 };
00101
00102
00103
00104
00105 class IMG_API IMG_TTChannel {
00106 public:
00107 IMG_TTChannel();
00108 virtual ~IMG_TTChannel();
00109
00110 virtual void filterPixels(float *rgba, int nchan,
00111 int first_x, int first_y,
00112 const UT_Vector3 &zeqn,
00113 const float *xweights,
00114 const float *yweights,
00115 int usize, int vsize,
00116 IMG_TT_DEEP_INTERP interp) = 0;
00117
00118 virtual void getPixel(float *rgba, int nchan, int iu, int iv) = 0;
00119
00120
00121 virtual void getPixel(void *pixel, int iu, int iv) = 0;
00122
00123
00124 virtual void closeChannel() {};
00125 };
00126
00127
00128
00129
00130
00131
00132 class IMG_API IMG_FileTTMap : public IMG_File {
00133 public:
00134 IMG_FileTTMap();
00135 virtual ~IMG_FileTTMap();
00136
00137 virtual const char *className() const { return "IMG_FileTTMap"; }
00138
00139 int getOGLRaster(void *data, int xres, int yres,
00140 IMG_ColorModel cm, IMG_DataType dt,
00141 int raster_number=0);
00142
00143
00144
00145
00146 void unfilteredSample(
00147 float *result, int tuple_size, float u, float v,
00148 const IMG_TTFilterInfo &info,
00149 int channel, int raster);
00150
00151
00152
00153 void bilerp(float *result, int tuple_size, float u, float v,
00154 const IMG_TTFilterInfo &info,
00155 int channel, int raster);
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167 void sample(float *result, float &visible, int tuple_size,
00168 const float u[4], const float v[4],
00169 int nsamples, float quality,
00170 const IMG_TTFilterInfo &info,
00171 const UT_Vector3 &zeqn,
00172 int channel, int raster);
00173 void sample(float *result, float &visible, int tuple_size,
00174 const float u[4], const float v[4],
00175 int nsamples, float quality,
00176 const IMG_TTFilterInfo &info,
00177 int channel, int raster)
00178 {
00179 sample(result, visible,
00180 tuple_size, u, v, nsamples, quality,
00181 info, UT_Vector3(), channel, raster);
00182 }
00183 void sample(float *result, int tuple_size,
00184 const float u[4], const float v[4],
00185 int nsamples, float quality,
00186 const IMG_TTFilterInfo &info,
00187 const UT_Vector3 &zeqn,
00188 int channel, int raster)
00189 {
00190 float visible;
00191 sample(result, visible,
00192 tuple_size, u, v, nsamples, quality,
00193 info, zeqn, channel, raster);
00194 }
00195 void sample(float *result, int tuple_size,
00196 const float u[4], const float v[4],
00197 int nsamples, float quality,
00198 const IMG_TTFilterInfo &info,
00199 int channel, int raster)
00200 {
00201 float visible;
00202 sample(result, visible,
00203 tuple_size, u, v, nsamples, quality,
00204 info, UT_Vector3(), channel, raster);
00205 }
00206
00207
00208
00209 void envLookup(float *result, int tuple_size, const UT_Vector3 &r,
00210 int channel);
00211
00212 void envLookup(float *result, int tuple_size,
00213 const UT_Vector3 &r00, const UT_Vector3 &r01,
00214 const UT_Vector3 &r11, const UT_Vector3 &r10,
00215 const IMG_TTFilterInfo &info,
00216 int channel);
00217
00218 fpreal getUPixelSize() const { return myDx; }
00219 fpreal getVPixelSize() const { return myDy; }
00220
00221
00222 virtual UT_Options *getTextureOptions();
00223
00224
00225 virtual int getRasterCount() const { return 0; }
00226 int getChannelTupleSize(int ch) const;
00227 virtual int getNumChannels() const { return 0; }
00228 virtual int findChannelIndex(const char *name,
00229 int raster_index) const
00230 {
00231
00232 return 0;
00233 }
00234
00235 virtual int isReflMap() const { return 0; }
00236 virtual int isDSM() const { return 0; }
00237
00238
00239 virtual void dsmResolution(int &xres, int &yres);
00240 virtual int dsmGetChannels(UT_PtrArray<TBF_Channel *>&channels);
00241 virtual img_DSMPixelHandle *dsmGetReadHandle();
00242 virtual bool dsmOpenRawPixel(img_DSMPixelHandle &h, int x, int y);
00243 virtual void dsmDeleteReadHandle(img_DSMPixelHandle *h);
00244 virtual int dsmDepthComplexity(const img_DSMPixelHandle &h);
00245 virtual bool dsmPixelData(const img_DSMPixelHandle &h,
00246 int channel, fpreal *data,
00247 int data_size);
00248
00249 protected:
00250 void initialize(int xres, int yres,
00251 const fpreal *cscale,
00252 const int *csize,
00253 int mipcount,
00254 IMG_TTChannel **channels);
00255
00256 virtual int closeFile();
00257
00258 protected:
00259
00260 int myMipRead;
00261
00262 private:
00263
00264
00265
00266
00267
00268 void clearMips();
00269
00270
00271 int getMipOffset(int channel, int raster)
00272 {
00273 channel *= getRasterCount();
00274 channel += raster;
00275 return myMipCount * channel;
00276 }
00277
00278 float myDx, myDy;
00279
00280
00281
00282
00283 fpreal *myColorScale;
00284 int *myColorSize;
00285
00286
00287
00288
00289
00290 int myMipCount;
00291 IMG_TTMipSampler **myMips;
00292 };
00293
00294 #endif