00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00025 #ifndef __vtkTextureObject_h
00026 #define __vtkTextureObject_h
00027 
00028 #include "vtkObject.h"
00029 #include "vtkWeakPointer.h" 
00030 
00031 class vtkRenderWindow;
00032 class vtkOpenGLExtensionManager;
00033 class vtkPixelBufferObject;
00034 
00035 class VTK_RENDERING_EXPORT vtkTextureObject : public vtkObject
00036 {
00037 public:
00038 
00039   
00040   
00041   enum 
00042   {
00043     Lequal=0, 
00044     Gequal, 
00045     Less, 
00046     Greater, 
00047     Equal, 
00048     NotEqual, 
00049     AlwaysTrue, 
00050     Never, 
00051     NumberOfDepthTextureCompareFunctions
00052   };
00053   
00054   
00055   enum
00056   {
00057     Luminance=0, 
00058     Intensity, 
00059     Alpha, 
00060     NumberOfDepthTextureModes
00061   };
00062   
00063   
00064   enum
00065   {
00066     Clamp=0,
00067     ClampToEdge,
00068     Repeat,
00069     ClampToBorder,
00070     MirroredRepeat,
00071     NumberOfWrapModes
00072   };
00073   
00074   
00075   enum
00076   {
00077     Nearest=0,
00078     Linear,
00079     NearestMipmapNearest,
00080     NearestMipmapLinear,
00081     LinearMipmapNearest,
00082     LinearMipmapLinear,
00083     NumberOfMinificationModes
00084   };
00085   
00086   
00087   enum
00088   {
00089     Native=0, 
00090     Fixed16,
00091     Fixed24,
00092     Fixed32,
00093     Float32,
00094     NumberOfDepthFormats
00095   };
00096   
00097   
00098   
00099   static vtkTextureObject* New();
00100   vtkTypeMacro(vtkTextureObject, vtkObject);
00101   void PrintSelf(ostream& os, vtkIndent indent);
00102 
00104 
00108   void SetContext(vtkRenderWindow*);
00109   vtkRenderWindow* GetContext();
00111 
00113 
00115   vtkGetMacro(Width, unsigned int);
00116   vtkGetMacro(Height, unsigned int);
00117   vtkGetMacro(Depth, unsigned int);
00118   vtkGetMacro(Components, int);
00120 
00121   vtkGetMacro(NumberOfDimensions, int);
00122 
00124 
00125   vtkGetMacro(Target, unsigned int);
00127 
00129 
00130   vtkGetMacro(Handle, unsigned int);
00132 
00134 
00136   void Bind();
00137   void UnBind();
00139 
00142   bool IsBound();
00143   
00146   void SendParameters();
00147   
00149 
00156   bool Create1D(int numComps,
00157                 vtkPixelBufferObject *pbo,
00158                 bool shaderSupportsTextureInt);
00160 
00162 
00165   bool Create2D(unsigned int width, unsigned int height, int numComps,
00166                 vtkPixelBufferObject *pbo,
00167                 bool shaderSupportsTextureInt);
00169 
00171 
00173   bool CreateDepth(unsigned int width,
00174                    unsigned int height,
00175                    int internalFormat,
00176                    vtkPixelBufferObject *pbo);
00178   
00180 
00182   bool CreateDepthFromRaw(unsigned int width,
00183                           unsigned int height,
00184                           int internalFormat,
00185                           int rawType,
00186                           void *raw);
00188   
00190 
00191   bool AllocateDepth(unsigned int width,unsigned int height,
00192                      int internalFormat);
00194   
00197   bool Allocate1D(unsigned int width, int numComps,int vtkType);
00198   
00200 
00202   bool Allocate2D(unsigned int width,unsigned int height, int numComps,
00203                   int vtkType);
00205   
00207 
00209   bool Allocate3D(unsigned int width,unsigned int height,
00210                   unsigned int depth, int numComps,
00211                   int vtkType);
00213   
00214   
00216 
00219   bool Create3D(unsigned int width, unsigned int height, unsigned int depth, 
00220                 int numComps, vtkPixelBufferObject *pbo,
00221                 bool shaderSupportsTextureInt);
00223 
00224 
00226 
00229   bool Create2D(unsigned int width, unsigned int height, int numComps,
00230                 int vtktype,
00231                 bool shaderSupportsTextureInt);
00232   bool Create3D(unsigned int width, unsigned int height, unsigned int depth,
00233                 int numComps, int vtktype,
00234                 bool shaderSupportsTextureInt);
00236 
00241   vtkPixelBufferObject* Download();
00242 
00244   int GetDataType();
00245 
00246   unsigned int GetInternalFormat(int vtktype, int numComps,
00247                                  bool shaderSupportsTextureInt);
00248   unsigned int GetFormat(int vtktype, int numComps,
00249                          bool shaderSupportsTextureInt);
00250   
00252 
00255   vtkGetMacro(WrapS,int);
00256   vtkSetMacro(WrapS,int);
00258   
00260 
00263   vtkGetMacro(WrapT,int);
00264   vtkSetMacro(WrapT,int);
00266   
00268 
00271   vtkGetMacro(WrapR,int);
00272   vtkSetMacro(WrapR,int);
00274   
00276 
00281   vtkGetMacro(MinificationFilter,int);
00282   vtkSetMacro(MinificationFilter,int);
00284   
00286 
00288   vtkGetMacro(LinearMagnification,bool);
00289   vtkSetMacro(LinearMagnification,bool);
00291   
00293 
00295   vtkSetVector4Macro(BorderColor,float);
00296   vtkGetVector4Macro(BorderColor,float);
00298   
00300 
00303   vtkSetMacro(Priority,float);
00304   vtkGetMacro(Priority,float);
00306   
00308 
00310   vtkSetMacro(MinLOD,float);
00311   vtkGetMacro(MinLOD,float);
00313   
00315 
00317   vtkSetMacro(MaxLOD,float);
00318   vtkGetMacro(MaxLOD,float);
00320   
00322 
00325   vtkSetMacro(BaseLevel,int);
00326   vtkGetMacro(BaseLevel,int);
00328   
00330 
00333   vtkSetMacro(MaxLevel,int);
00334   vtkGetMacro(MaxLevel,int);
00336   
00338 
00344   vtkGetMacro(DepthTextureCompare,bool);
00345   vtkSetMacro(DepthTextureCompare,bool);
00347   
00349 
00359   vtkGetMacro(DepthTextureCompareFunction,int);
00360   vtkSetMacro(DepthTextureCompareFunction,int);
00362   
00364 
00369   vtkGetMacro(DepthTextureMode,int);
00370   vtkSetMacro(DepthTextureMode,int);
00372   
00374 
00376   vtkGetMacro(GenerateMipmap,bool);
00377   vtkSetMacro(GenerateMipmap,bool);
00379   
00381   static bool IsSupported(vtkRenderWindow* renWin);
00382   
00384 
00403   void CopyToFrameBuffer(int srcXmin,
00404                          int srcYmin,
00405                          int srcXmax,
00406                          int srcYmax,
00407                          int dstXmin,
00408                          int dstYmin,
00409                          int width,
00410                          int height);
00412   
00413   
00415 
00423   void CopyFromFrameBuffer(int srcXmin,
00424                            int srcYmin,
00425                            int dstXmin,
00426                            int dstYmin,
00427                            int width,
00428                            int height);
00430   
00431   
00432 
00433 protected:
00434   vtkTextureObject();
00435   ~vtkTextureObject();
00436 
00438   bool LoadRequiredExtensions(vtkOpenGLExtensionManager*);
00439 
00441   void CreateTexture();
00442 
00444   void DestroyTexture();
00445   
00446   int NumberOfDimensions;
00447   unsigned int Width;
00448   unsigned int Height;
00449   unsigned int Depth;
00450 
00451   unsigned int Target; 
00452   unsigned int Format; 
00453   unsigned int Type; 
00454   int Components;
00455 
00456   vtkWeakPointer<vtkRenderWindow> Context;
00457   unsigned int Handle;
00458   bool SupportsTextureInteger;
00459   bool SupportsTextureFloat;
00460 
00461   int WrapS;
00462   int WrapT;
00463   int WrapR;
00464   int MinificationFilter;
00465   bool LinearMagnification;
00466   float BorderColor[4];
00467   
00468   float Priority;
00469   float MinLOD;
00470   float MaxLOD;
00471   int BaseLevel;
00472   int MaxLevel;
00473   
00474   
00475   bool DepthTextureCompare;
00476   int DepthTextureCompareFunction;
00477   int DepthTextureMode;
00478   
00479   bool GenerateMipmap;
00480   
00481   vtkTimeStamp SendParametersTime;
00482   
00483 private:
00484   vtkTextureObject(const vtkTextureObject&); 
00485   void operator=(const vtkTextureObject&); 
00486 
00487 };
00488 
00489 #endif
00490 
00491