VTK
|
00001 /*========================================================================= 00002 00003 Program: Visualization Toolkit 00004 Module: vtkOpenGLImageSliceMapper.h 00005 00006 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen 00007 All rights reserved. 00008 See Copyright.txt or http://www.kitware.com/Copyright.htm for details. 00009 00010 This software is distributed WITHOUT ANY WARRANTY; without even 00011 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00012 PURPOSE. See the above copyright notice for more information. 00013 00014 =========================================================================*/ 00025 #ifndef __vtkOpenGLImageSliceMapper_h 00026 #define __vtkOpenGLImageSliceMapper_h 00027 00028 #include "vtkImageSliceMapper.h" 00029 00030 class vtkWindow; 00031 class vtkRenderer; 00032 class vtkRenderWindow; 00033 class vtkOpenGLRenderWindow; 00034 class vtkImageSlice; 00035 class vtkImageProperty; 00036 class vtkImageData; 00037 00038 class VTK_RENDERING_EXPORT vtkOpenGLImageSliceMapper : 00039 public vtkImageSliceMapper 00040 { 00041 public: 00042 static vtkOpenGLImageSliceMapper *New(); 00043 vtkTypeMacro(vtkOpenGLImageSliceMapper,vtkImageSliceMapper); 00044 virtual void PrintSelf(ostream& os, vtkIndent indent); 00045 00047 void Render(vtkRenderer *ren, vtkImageSlice *prop); 00048 00052 void ReleaseGraphicsResources(vtkWindow *); 00053 00054 protected: 00055 vtkOpenGLImageSliceMapper(); 00056 ~vtkOpenGLImageSliceMapper(); 00057 00059 00060 void RenderColorAndLighting( 00061 double red, double green, double blue, 00062 double alpha, double ambient, double diffuse); 00064 00066 00069 void RecursiveRenderTexturedPolygon( 00070 vtkRenderer *ren, vtkImageProperty *property, 00071 vtkImageData *image, int extent[6], bool recursive); 00073 00075 00077 void RenderTexturedPolygon( 00078 vtkRenderer *ren, vtkImageProperty *property, 00079 vtkImageData *image, int extent[6], bool recursive); 00081 00084 void RenderPolygon(vtkPoints *points, const int extent[6], bool textured); 00085 00087 00090 void RenderBackground( 00091 vtkPoints *points, const int extent[6], bool textured); 00093 00095 void BindFragmentProgram(vtkRenderer *ren, vtkImageProperty *property); 00096 00098 vtkStdString BuildFragmentProgram(vtkImageProperty *property); 00099 00101 00106 void ComputeTextureSize( 00107 const int extent[6], int &xdim, int &ydim, 00108 int imageSize[2], int textureSize[2]); 00110 00113 bool TextureSizeOK(const int size[2]); 00114 00116 void CheckOpenGLCapabilities(vtkOpenGLRenderWindow *renWin); 00117 00118 long TextureIndex; // OpenGL ID for texture or display list 00119 long BackgroundTextureIndex; // OpenGL ID for texture or display list 00120 long FragmentShaderIndex; // OpenGL ID for fragment shader 00121 vtkRenderWindow *RenderWindow; // RenderWindow used for previous render 00122 int TextureSize[2]; 00123 int TextureBytesPerPixel; 00124 int LastOrientation; 00125 int LastSliceNumber; 00126 00127 vtkTimeStamp LoadTime; 00128 int LoadCount; 00129 00130 bool UsePowerOfTwoTextures; 00131 bool UseClampToEdge; 00132 bool UseFragmentProgram; 00133 00134 private: 00135 vtkOpenGLImageSliceMapper(const vtkOpenGLImageSliceMapper&); // Not implemented. 00136 void operator=(const vtkOpenGLImageSliceMapper&); // Not implemented. 00137 }; 00138 00139 #endif