MeVisLabToolboxReference
MeVisLab/Standard/Sources/Inventor/SoView2D/View2DTexture.h
Go to the documentation of this file.
00001 #ifndef __View2DTexture_H
00002 #define __View2DTexture_H
00003 //----------------------------------------------------------------------------------
00004 // **InsertLicense** code
00005 //----------------------------------------------------------------------------------
00007 
00012 //----------------------------------------------------------------------------------
00013 
00014 #ifndef __mlDataTypes_H
00015 #include "mlDataTypes.h"
00016 #endif
00017 #ifndef __SoView2DSystem_H
00018 #include "SoView2DSystem.h"
00019 #endif
00020 
00021 #include "mlOpenGL.h"
00022 #include "mlGLResources.h"
00023 
00025 enum View2DTextureFilter {
00026     FILTER_LINEAR = 0,        
00027     FILTER_NEAREST,           
00028     FILTER_LINEAR_POSTCLASS,  
00029     FILTER_CUBIC_POSTCLASS,   
00030     FILTER_TEXT_HALO,         
00031     FILTER_COUNT = FILTER_TEXT_HALO 
00032 };
00033 
00034 // declare the LUTData
00035 ML_START_NAMESPACE
00036 
00037   template <typename T> class LUTData;
00038 
00039 ML_END_NAMESPACE
00040 
00041 class SoSFMLImage;
00042 class View2DShader;
00043 
00045 
00056 class SOVIEW2D_API View2DTexture {
00057 
00058 public:
00060   View2DTexture();
00061   ~View2DTexture();
00062 
00064   void setLut(ml::LUTData<MLuint8>* newLut);
00065 
00067   ml::LUTData<MLuint8>* getLut();
00068 
00070   void setFilter(View2DTextureFilter filter);
00071 
00073   View2DTextureFilter getFilter() { return _filter; }
00074 
00084   void setData(void* data, MLssize_t sizeX, MLssize_t sizeY, MLssize_t dtype = MLuint8Type, MLssize_t channels = 1);
00085 
00087   MLDataType getImageDataType() { return _type; }
00088 
00090   void allocateData(MLssize_t sizeX, MLssize_t sizeY, MLssize_t dtype = MLuint8Type, MLssize_t channels = 1);
00091 
00093   void* getData() { return _data; };
00094 
00096   bool hasData() { return _data!=0; };
00097 
00099   void freeData();
00100 
00102   void setDataChanged() { _dataChanged = true; };
00103 
00105   bool isValidUserID(void* user, MLssize_t id);
00106 
00108   bool isValidUser(void* user) { return user==_user; };
00109 
00111   void setUserID(void* user, MLssize_t id);
00112 
00114   void getSize(MLssize_t &x, MLssize_t &y) { x = _sizeX; y = _sizeY; };
00115 
00118   void loadSliceToTexture(SoSFMLImage* image, MLssize_t slice, MLssize_t timepoint);
00119 
00121   void bindTexture();
00122 
00124   void drawTexture(float dx1,float dy1, float dx2, float dy2);
00126   void drawTexture(float vp1[3],float vp2[3],float vp3[3]);
00127 
00129   void restoreState();
00130 
00132   void freeTexture();
00133 
00135   bool needsImageData();
00136 
00138   void setShader(View2DShader* shader);
00139 
00142   void setForceShaderUsage(bool flag);
00143 
00145   View2DShader* getShader() { return _shader; }
00146 
00148   static MLssize_t getPowerOfTwo(MLssize_t size, bool& subflag);
00149 
00151   static MLssize_t getPowerOfTwo(MLssize_t size);
00152 
00155   void setCheckerInterval(size_t interval);
00156 
00158   size_t getCheckerInterval() const;
00159 
00161   void setCheckerTilesInverted(bool inverted);
00162 
00164   bool areCheckerTilesInverted() const;
00165 private:
00167   void createTextureIds();
00168 
00171   static MLuint32* convertToRGBA(void* data, MLssize_t size, MLssize_t channels, size_t dataTypeSize, ml::LUTData<MLuint8>* lut);
00172 
00174   void transferTextureData(void* data, GLuint format, GLuint internalFormat, GLuint transferDataType);
00175 
00177   MLssize_t calcNumTextures(MLssize_t size);
00178 
00180   MLssize_t _sizeX;
00182   MLssize_t _sizeY;
00183 
00185   MLDataType _type;
00187   ml::GLTextures _textures;
00189   MLssize_t     _numTexturesX;
00191   MLssize_t     _numTexturesY;
00192 
00194   ml::LUTData<MLuint8>* _lut;
00195 
00197   MLssize_t _channels;
00198 
00200   void*  _data;
00202   bool   _dataChanged;
00204   View2DTextureFilter _filter;
00205 
00207   void* _user;
00209   MLssize_t _id;
00210 
00212   MLuint32 _lastLutChangeID;
00214   MLssize_t      _lastLutSize;
00215 
00217   View2DShader* _shader;
00219   bool          _shaderChanged;
00221   bool          _forceShaderUsage;
00222 
00224   static MLssize_t _maxTextureSize;
00225 
00229   size_t _checkerInterval;
00230 
00232   bool _areCheckersInverted;
00233 };
00234 
00235 #endif
00236