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