MeVisLabToolboxReference
|
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