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 vtkTypeRevisionMacro(vtkOpenGLVolumeTextureMapper3D,vtkVolumeTextureMapper3D);
00043 void PrintSelf(ostream& os, vtkIndent indent);
00044
00045 static vtkOpenGLVolumeTextureMapper3D *New();
00046
00050 int IsRenderSupported(vtkVolumeProperty *);
00051
00052
00053
00056 virtual void Render(vtkRenderer *ren, vtkVolume *vol);
00057
00058
00059
00060
00061
00062
00063
00064 vtkGetMacro( Initialized, int );
00065
00069 void ReleaseGraphicsResources(vtkWindow *);
00070
00071 protected:
00072 vtkOpenGLVolumeTextureMapper3D();
00073 ~vtkOpenGLVolumeTextureMapper3D();
00074
00075
00076
00077 void GetLightInformation(vtkRenderer *ren,
00078 vtkVolume *vol,
00079 GLfloat lightDirection[2][4],
00080 GLfloat lightDiffuseColor[2][4],
00081 GLfloat lightSpecularColor[2][4],
00082 GLfloat halfwayVector[2][4],
00083 GLfloat *ambient );
00084
00085
00086 int Initialized;
00087 GLuint Volume1Index;
00088 GLuint Volume2Index;
00089 GLuint Volume3Index;
00090 GLuint ColorLookupIndex;
00091 GLuint AlphaLookupIndex;
00092 vtkRenderWindow *RenderWindow;
00093
00094 bool SupportsCompressedTexture;
00095 bool SupportsNonPowerOfTwoTextures;
00096
00097
00098
00099 int InternalAlpha;
00100 int InternalLA;
00101 int InternalRGB;
00102 int InternalRGBA;
00103
00104 void Initialize();
00105
00106 virtual void RenderNV(vtkRenderer *ren, vtkVolume *vol);
00107 virtual void RenderFP(vtkRenderer *ren, vtkVolume *vol);
00108
00109 void RenderOneIndependentNoShadeFP( vtkRenderer *ren,
00110 vtkVolume *vol );
00111 void RenderOneIndependentShadeFP( vtkRenderer *ren, vtkVolume *vol );
00112 void RenderTwoDependentNoShadeFP( vtkRenderer *ren, vtkVolume *vol );
00113 void RenderTwoDependentShadeFP( vtkRenderer *ren, vtkVolume *vol );
00114 void RenderFourDependentNoShadeFP( vtkRenderer *ren, vtkVolume *vol );
00115 void RenderFourDependentShadeFP( vtkRenderer *ren, vtkVolume *vol );
00116
00117 void RenderOneIndependentNoShadeNV( vtkRenderer *ren, vtkVolume *vol );
00118 void RenderOneIndependentShadeNV( vtkRenderer *ren, vtkVolume *vol );
00119 void RenderTwoDependentNoShadeNV( vtkRenderer *ren, vtkVolume *vol );
00120 void RenderTwoDependentShadeNV( vtkRenderer *ren, vtkVolume *vol );
00121 void RenderFourDependentNoShadeNV( vtkRenderer *ren, vtkVolume *vol );
00122 void RenderFourDependentShadeNV( vtkRenderer *ren, vtkVolume *vol );
00123
00124 void SetupOneIndependentTextures( vtkRenderer *ren, vtkVolume *vol );
00125 void SetupTwoDependentTextures( vtkRenderer *ren, vtkVolume *vol );
00126 void SetupFourDependentTextures( vtkRenderer *ren, vtkVolume *vol );
00127
00128 void SetupRegisterCombinersNoShadeNV( vtkRenderer *ren,
00129 vtkVolume *vol,
00130 int components );
00131
00132 void SetupRegisterCombinersShadeNV( vtkRenderer *ren,
00133 vtkVolume *vol,
00134 int components );
00135
00136 void DeleteTextureIndex( GLuint *index );
00137 void CreateTextureIndex( GLuint *index );
00138
00139 void RenderPolygons( vtkRenderer *ren,
00140 vtkVolume *vol,
00141 int stages[4] );
00142
00143 void SetupProgramLocalsForShadingFP( vtkRenderer *ren, vtkVolume *vol );
00144
00146
00148 int IsTextureSizeSupported(int size[3],
00149 int components);
00151
00153 void Setup3DTextureParameters( vtkVolumeProperty *property );
00154
00155 private:
00156 vtkOpenGLVolumeTextureMapper3D(const vtkOpenGLVolumeTextureMapper3D&);
00157 void operator=(const vtkOpenGLVolumeTextureMapper3D&);
00158 };
00159
00160
00161 #endif
00162
00163
00164