00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef __IMG_TileDevice__
00023 #define __IMG_TileDevice__
00024
00025 #include "IMG_API.h"
00026 #include <UT/UT_Rect.h>
00027 #include <UT/UT_String.h>
00028 #include <UT/UT_StringArray.h>
00029 #include "IMG_FileTypes.h"
00030
00031 class UT_WorkBuffer;
00032 class IMG_Raster;
00033 class IMG_Format;
00034 class IMG_TileInterface;
00035 class IMG_TileOptions;
00036 class IMG_TileOptionList;
00037
00038 class IMG_API IMG_TileDevice {
00039 public:
00040 IMG_TileDevice();
00041 virtual ~IMG_TileDevice();
00042
00043 enum {
00044 IMG_TILE_BOTTOM_FIRST = 0,
00045 IMG_TILE_RANDOM_ORDER = 1,
00046 IMG_TILE_TOP_FIRST = 2
00047 };
00048
00049 int isRandomAccess() const { return myRandomAccess; }
00050
00051
00052 static IMG_TileDevice *newFileDevice();
00053 static IMG_TileDevice *newNullDevice();
00054 static IMG_TileDevice *newMPlayDevice(int from_middle=1);
00055 static IMG_TileDevice *imdisplayFileDevice(const char *filename);
00056 static IMG_TileDevice *newSharedMemDevice(
00057 const char *cmd = "mdriver %d %d %d %d",
00058 int from_middle = 1);
00059 static IMG_TileDevice *newSocketDevice(const char *host);
00060
00061 static void setFileDevCreator(IMG_TileDevice *(*creator)());
00062 static void setMPlayDevCreator(IMG_TileDevice *(*creator)(int ));
00063
00064
00065
00066 void setVisibleRegion(int l, int r, int b, int t);
00067
00068
00069
00070
00071 void setRenderSize(int rwidth, int rheight);
00072
00073
00074 virtual int open(const IMG_TileOptions &info,
00075 int xres, int yres,
00076 int tile_width, int tile_height,
00077 fpreal aspect) = 0;
00078
00079 virtual int openMulti(
00080 IMG_TileOptionList &flist,
00081 int xres, int yres,
00082 int tile_width, int tile_height,
00083 fpreal aspect);
00084
00085 virtual void setWhitePoint(fpreal white);
00086
00087
00088 virtual void checkpoint();
00089
00090
00091 void setRenderSourceName( const char *name )
00092 { myRenderSourceName.harden(name); }
00093 const char *getRenderSourceName() const
00094 { return myRenderSourceName; }
00095
00096
00097
00098 int getFileCount() const { return myFileCount; }
00099 IMG_DataType getDataType(int idx=0) const;
00100
00101
00102 IMG_ColorModel getColorModel(int idx=0) const;
00103
00104 IMG_DataType *getDataTypes() { return myDataType; }
00105 IMG_ColorModel *getColorModels() { return myColorModel; }
00106
00107
00108
00109 virtual void writeCustomTag(const char *tagname, int size,
00110 const char **values);
00111
00112
00113
00114
00115
00116
00117
00118
00119 virtual int writeTile(const void *data,
00120 unsigned x0, unsigned x1,
00121 unsigned y0, unsigned y1) = 0;
00122
00123 virtual void flush();
00124
00125 virtual int close() = 0;
00126
00127
00128
00129 virtual int unsafeFlush();
00130
00131
00132
00133
00134
00135 virtual int getNextTile(int &xl, int &xr, int &yb, int &yt);
00136
00137
00138
00139
00140 virtual bool getClickedTile(int &tx, int &ty) const;
00141
00142 virtual void resetTileRequestor();
00143 virtual int getTileMode() const;
00144
00145 virtual void terminateOnConnectionLost(bool ) {}
00146
00147
00148
00149 virtual bool wantsHoudiniPort() const { return false; }
00150
00151 protected:
00152
00153
00154
00155
00156
00157 virtual bool getMouseClickPosition(int &x, int &y) const
00158 { return false; }
00159
00160
00161
00162 void setResolution(int xres, int yres,
00163 int tilewidth, int tileheight,
00164 int tile_order = IMG_TILE_BOTTOM_FIRST);
00165
00166 void setModel(const IMG_TileOptions &finfo);
00167 void setModel(IMG_TileOptionList &flist);
00168 void setModel(const IMG_DataType *dt, const IMG_ColorModel *cm);
00169
00170
00171
00172
00173 void mapImageToTile(int ix, int iy, int &tx, int &ty);
00174 void getTileBounds(int tx, int ty,
00175 int &xl, int &xr, int &yb, int &yt);
00176
00177 bool hasDataWindow(int full_xres, int full_yres) const;
00178 int getDataX() const { return myVL; }
00179 int getDataY() const { return myVB; }
00180 int getDataWidth() const { return myVR - myVL + 1; }
00181 int getDataHeight() const { return myVT - myVB + 1; }
00182
00183 UT_InclusiveRect getDataWindow() const;
00184
00185 int myFileCount;
00186 int myXres, myYres;
00187 fpreal myAspectRatio;
00188 int myTileWidth, myTileHeight;
00189 int myVL, myVR, myVB, myVT;
00190 int myRWidth, myRHeight;
00191 unsigned myRandomAccess;
00192
00193 private:
00194 int myClickedTileXY[2];
00195 int myFilterX, myFilterY;
00196 int myTileCountX, myTileCountY;
00197 int myRandomCheck;
00198 IMG_DataType *myDataType;
00199 IMG_ColorModel *myColorModel;
00200 IMG_TileInterface *myTiles;
00201 UT_String myRenderSourceName;
00202 };
00203
00204 #endif