00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00026 #ifndef __vtkOpenGLVolumeTextureMapper3D_h
00027 #define __vtkOpenGLVolumeTextureMapper3D_h
00028 
00029 #include "vtkVolumeTextureMapper3D.h"
00030 
00031 #ifndef VTK_IMPLEMENT_MESA_CXX
00032 # include "vtkOpenGL.h" 
00033 #endif
00034  
00035 
00036 class vtkRenderWindow;
00037 class vtkVolumeProperty;
00038 
00039 class VTK_VOLUMERENDERING_EXPORT vtkOpenGLVolumeTextureMapper3D : public vtkVolumeTextureMapper3D
00040 {
00041 public:
00042   vtkTypeMacro(vtkOpenGLVolumeTextureMapper3D,vtkVolumeTextureMapper3D);
00043   void PrintSelf(ostream& os, vtkIndent indent);
00044 
00045   static vtkOpenGLVolumeTextureMapper3D *New();
00046 
00048 
00051   int IsRenderSupported(vtkVolumeProperty *,
00052                         vtkRenderer *ren);
00054   
00055 
00056 
00059   virtual void Render(vtkRenderer *ren, vtkVolume *vol);
00060 
00061 
00062 
00063   
00064   
00065   
00066   
00067   vtkGetMacro( Initialized, int );
00068   
00072   void ReleaseGraphicsResources(vtkWindow *);
00073   
00074 protected:
00075   vtkOpenGLVolumeTextureMapper3D();
00076   ~vtkOpenGLVolumeTextureMapper3D();
00077 
00078 
00079 
00080   void GetLightInformation(vtkRenderer *ren,
00081                            vtkVolume *vol,
00082                            GLfloat lightDirection[2][4],
00083                            GLfloat lightDiffuseColor[2][4],
00084                            GLfloat lightSpecularColor[2][4],
00085                            GLfloat halfwayVector[2][4],
00086                            GLfloat *ambient );  
00087 
00088     
00089   int              Initialized;
00090   GLuint           Volume1Index;
00091   GLuint           Volume2Index;
00092   GLuint           Volume3Index;
00093   GLuint           ColorLookupIndex;
00094   GLuint           AlphaLookupIndex;
00095   vtkRenderWindow *RenderWindow;
00096   
00097   bool SupportsCompressedTexture;
00098   bool SupportsNonPowerOfTwoTextures;
00099   
00100   
00101   
00102   int InternalAlpha; 
00103   int InternalLA; 
00104   int InternalRGB; 
00105   int InternalRGBA; 
00106   
00107   void Initialize(vtkRenderer *r);
00108 
00109   virtual void RenderNV(vtkRenderer *ren, vtkVolume *vol);
00110   virtual void RenderFP(vtkRenderer *ren, vtkVolume *vol);
00111 
00112   void RenderOneIndependentNoShadeFP( vtkRenderer *ren,
00113                                       vtkVolume *vol );
00114   void RenderOneIndependentShadeFP( vtkRenderer *ren, vtkVolume *vol );
00115   void RenderTwoDependentNoShadeFP( vtkRenderer *ren, vtkVolume *vol );
00116   void RenderTwoDependentShadeFP( vtkRenderer *ren, vtkVolume *vol );
00117   void RenderFourDependentNoShadeFP( vtkRenderer *ren, vtkVolume *vol );
00118   void RenderFourDependentShadeFP( vtkRenderer *ren, vtkVolume *vol );
00119 
00120   void RenderOneIndependentNoShadeNV( vtkRenderer *ren, vtkVolume *vol );
00121   void RenderOneIndependentShadeNV( vtkRenderer *ren, vtkVolume *vol );
00122   void RenderTwoDependentNoShadeNV( vtkRenderer *ren, vtkVolume *vol );
00123   void RenderTwoDependentShadeNV( vtkRenderer *ren, vtkVolume *vol );
00124   void RenderFourDependentNoShadeNV( vtkRenderer *ren, vtkVolume *vol );
00125   void RenderFourDependentShadeNV( vtkRenderer *ren, vtkVolume *vol );
00126   
00127   void SetupOneIndependentTextures( vtkRenderer *ren, vtkVolume *vol );
00128   void SetupTwoDependentTextures( vtkRenderer *ren, vtkVolume *vol );
00129   void SetupFourDependentTextures( vtkRenderer *ren, vtkVolume *vol );
00130 
00131   void SetupRegisterCombinersNoShadeNV( vtkRenderer *ren,
00132                                         vtkVolume *vol,
00133                                         int components );
00134 
00135   void SetupRegisterCombinersShadeNV( vtkRenderer *ren,
00136                                       vtkVolume *vol,
00137                                       int components );
00138 
00139   void DeleteTextureIndex( GLuint *index );
00140   void CreateTextureIndex( GLuint *index );
00141   
00142   void RenderPolygons( vtkRenderer *ren,
00143                        vtkVolume *vol,
00144                        int stages[4] );
00145 
00146   void SetupProgramLocalsForShadingFP( vtkRenderer *ren, vtkVolume *vol );
00147   
00149 
00151   int IsTextureSizeSupported(int size[3],
00152                              int components);
00154 
00156   void Setup3DTextureParameters( vtkVolumeProperty *property );
00157 
00158 private:
00159   vtkOpenGLVolumeTextureMapper3D(const vtkOpenGLVolumeTextureMapper3D&);  
00160   void operator=(const vtkOpenGLVolumeTextureMapper3D&);  
00161 };
00162 
00163 
00164 #endif
00165 
00166 
00167