16 #ifndef vtkVolumeMask_h_ 17 #define vtkVolumeMask_h_ 57 glActiveTexture(GL_TEXTURE6);
58 glBindTexture(GL_TEXTURE_3D, this->
TextureId);
67 const char* arrayName,
70 glActiveTexture(GL_TEXTURE6);
72 bool needUpdate =
false;
73 bool modified =
false;
79 glBindTexture(GL_TEXTURE_3D,this->
TextureId);
81 int obsolete = needUpdate || !this->
Loaded ||
87 while(!obsolete && i<6)
89 obsolete = obsolete || this->
LoadedExtent[i]>textureExtent[i];
91 obsolete = obsolete || this->
LoadedExtent[i]<textureExtent[i];
112 cout <<
"Mask should be VTK_UNSIGNED_CHAR." << endl;
116 cout <<
"Mask should be a one-component scalar field." << endl;
128 textureSize[i] = textureExtent[2*i+1] - textureExtent[2*i] + 1;
133 glGetIntegerv(GL_MAX_3D_TEXTURE_SIZE, &width);
134 this->
Loaded = textureSize[0] <= width && textureSize[1] <= width &&
135 textureSize[2] <=
width;
140 glTexImage3D(GL_TEXTURE_3D, 0, internalFormat, textureSize[0],
141 textureSize[1], textureSize[2], 0, format, type, 0);
142 GLenum errorCode = glGetError();
143 this->
Loaded = errorCode!= GL_OUT_OF_MEMORY;
147 if(errorCode != GL_NO_ERROR)
149 cout <<
"After try to load the texture";
150 cout <<
"ERROR (x"<<hex<<errorCode<<
") " << dec;
154 this->
Loaded = textureSize[0] * textureSize[1]*
167 glTexParameterf(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
168 glTexParameterf(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
169 glTexParameterf(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
171 GLfloat borderColor[4]={0.0,0.0,0.0,0.0};
172 glTexParameterfv(GL_TEXTURE_3D, GL_TEXTURE_BORDER_COLOR, borderColor);
174 glPixelTransferf(GL_ALPHA_SCALE, 1.0);
175 glPixelTransferf(GL_ALPHA_BIAS, 0.0);
176 glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
178 if(!(textureExtent[1]-textureExtent[0]+cellFlag==dim[0]))
180 glPixelStorei(GL_UNPACK_ROW_LENGTH,dim[0]-cellFlag);
182 if(!(textureExtent[3]-textureExtent[2]+cellFlag==dim[1]))
184 glPixelStorei(GL_UNPACK_IMAGE_HEIGHT_EXT,
188 ((textureExtent[4]*(dim[1]-cellFlag)+textureExtent[2]) *
189 (dim[0]-cellFlag)+textureExtent[0]) *
192 glTexImage3D(GL_TEXTURE_3D, 0, internalFormat,
193 textureSize[0], textureSize[1], textureSize[2],
194 0, format, type, dataPtr);
197 glPixelStorei(GL_UNPACK_ROW_LENGTH,0);
198 glPixelStorei(GL_UNPACK_IMAGE_HEIGHT_EXT,0);
199 glPixelTransferf(GL_ALPHA_SCALE,1.0);
200 glPixelTransferf(GL_ALPHA_BIAS,0.0);
215 swapBounds[0] = (spacing[0] < 0);
216 swapBounds[1] = (spacing[1] < 0);
217 swapBounds[2] = (spacing[2] < 0);
233 static_cast<double>(this->
LoadedExtent[0+swapBounds[0]])*spacing[0];
235 static_cast<double>(this->
LoadedExtent[2+swapBounds[1]])*spacing[1];
236 this->LoadedBounds[4]=origin[2]+
237 static_cast<double>(this->
LoadedExtent[4+swapBounds[2]])*spacing[2];
238 this->LoadedBounds[1]=origin[0]+
239 static_cast<double>(this->
LoadedExtent[1-swapBounds[0]])*spacing[0];
240 this->LoadedBounds[3]=origin[1]+
241 static_cast<double>(this->
LoadedExtent[3-swapBounds[1]])*spacing[1];
242 this->LoadedBounds[5]=origin[2]+
243 static_cast<double>(this->
LoadedExtent[5-swapBounds[2]])*spacing[2];
248 int wholeTextureExtent[6];
253 wholeTextureExtent[i]--;
267 (
static_cast<double>(this->
LoadedExtent[2*i])+0.5)*spacing[i];
270 if(this->
LoadedExtent[2*i+1]==wholeTextureExtent[2*i+1])
273 (
static_cast<double>(this->
LoadedExtent[2*i+1])+1.0)*spacing[i];
278 (
static_cast<double>(this->
LoadedExtent[2*i+1])+0.5)*spacing[i];
289 if(this->
Loaded && (needUpdate || modified))
291 glTexParameterf(GL_TEXTURE_3D,GL_TEXTURE_MIN_FILTER,
293 glTexParameterf(GL_TEXTURE_3D,GL_TEXTURE_MAG_FILTER,
301 glActiveTexture(GL_TEXTURE0);
339 std::map<vtkImageData *,vtkVolumeMask*> Map;
348 #endif // vtkVolumeMask_h_ vtkIdType * GetLoadedExtent()
GLuint GLuint GLsizei GLenum type
vtkTimeStamp GetBuildTime()
GLenum GLenum GLenum input
virtual int GetDataTypeSize()=0
typedef GLuint(APIENTRYP PFNGLCREATEPROGRAMPROC)(void)
record modification and/or execution time
static vtkDataArray * GetScalars(vtkDataSet *input, int scalarMode, int arrayAccessMode, int arrayId, const char *arrayName, int &cellFlag)
virtual int GetDataType()=0
double * GetLoadedBounds()
int GetNumberOfComponents()
unsigned long int GetMTime()
virtual int * GetDimensions()
virtual double * GetOrigin()
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
topologically and geometrically regular array of data
GLint GLint GLsizei width
abstract superclass for arrays of numeric data
virtual double * GetSpacing()
void Update(vtkImageData *input, int cellFlag, int textureExtent[6], int scalarMode, int arrayAccessMode, int arrayId, const char *arrayName, vtkIdType maxMemoryInBytes)
virtual int * GetExtent()
virtual void * GetVoidPointer(vtkIdType id)=0
typedef GLint(APIENTRYP PFNGLGETATTRIBLOCATIONPROC)(GLuint program
#define VTK_UNSIGNED_CHAR
typedef GLenum(APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC)(GLenum target)
vtkIdType LoadedExtent[6]