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 "vtkRenderingOpenGL2Module.h" // For export macro 00029 #include "vtkImageSliceMapper.h" 00030 00031 class vtkRenderWindow; 00032 class vtkOpenGLRenderWindow; 00033 class vtkActor; 00034 00035 class VTKRENDERINGOPENGL2_EXPORT vtkOpenGLImageSliceMapper : 00036 public vtkImageSliceMapper 00037 { 00038 public: 00039 static vtkOpenGLImageSliceMapper *New(); 00040 vtkTypeMacro(vtkOpenGLImageSliceMapper, vtkImageSliceMapper); 00041 virtual void PrintSelf(ostream& os, vtkIndent indent); 00042 00044 void Render(vtkRenderer *ren, vtkImageSlice *prop); 00045 00049 void ReleaseGraphicsResources(vtkWindow *); 00050 00051 protected: 00052 vtkOpenGLImageSliceMapper(); 00053 ~vtkOpenGLImageSliceMapper(); 00054 00056 00059 void RecursiveRenderTexturedPolygon( 00060 vtkRenderer *ren, vtkImageProperty *property, 00061 vtkImageData *image, int extent[6], bool recursive); 00063 00065 00067 void RenderTexturedPolygon( 00068 vtkRenderer *ren, vtkImageProperty *property, 00069 vtkImageData *image, int extent[6], bool recursive); 00071 00074 void RenderPolygon(vtkActor *actor, vtkPoints *points, const int extent[6], vtkRenderer *ren); 00075 00077 00080 void RenderBackground( 00081 vtkActor *actor, vtkPoints *points, const int extent[6], vtkRenderer *ren); 00083 00085 void BindFragmentProgram(vtkRenderer *ren, vtkImageProperty *property); 00086 00088 vtkStdString BuildFragmentProgram(vtkImageProperty *property); 00089 00091 00096 void ComputeTextureSize( 00097 const int extent[6], int &xdim, int &ydim, 00098 int imageSize[2], int textureSize[2]); 00100 00103 bool TextureSizeOK(const int size[2]); 00104 00106 void CheckOpenGLCapabilities(vtkOpenGLRenderWindow *renWin); 00107 00108 long FragmentShaderIndex; // OpenGL ID for fragment shader 00109 vtkRenderWindow *RenderWindow; // RenderWindow used for previous render 00110 int TextureSize[2]; 00111 int TextureBytesPerPixel; 00112 int LastOrientation; 00113 int LastSliceNumber; 00114 00115 vtkActor *PolyDataActor; 00116 vtkActor *BackingPolyDataActor; 00117 vtkActor *BackgroundPolyDataActor; 00118 00119 vtkTimeStamp LoadTime; 00120 int LoadCount; 00121 00122 bool UsePowerOfTwoTextures; 00123 bool UseClampToEdge; 00124 bool UseFragmentProgram; 00125 00126 private: 00127 vtkOpenGLImageSliceMapper(const vtkOpenGLImageSliceMapper&); // Not implemented. 00128 void operator=(const vtkOpenGLImageSliceMapper&); // Not implemented. 00129 }; 00130 00131 #endif