Main Page | Namespace List | Class Hierarchy | Class List | Directories | File List | Namespace Members | Class Members

mitkFbfbpSpeedUsingGpu.h

00001 /*=========================================================================
00002 
00003   Program:   3DMed
00004   Date:      $Date: 2014-02-25 18:30:00 +0800 $
00005   Version:   $Version: 4.6.0 $
00006   Copyright: MIPG, Institute of Automation, Chinese Academy of Sciences
00007 
00008 =========================================================================*/
00009 
00010 
00011 #ifndef __mitkFbFbpUsingGpu_h
00012 #define __mitkFbFbpUsingGpu_h
00013 
00014 #include <GL/glew.h>
00015 #include <GL/glut.h>
00016 #include <Cg/cgGL.h>
00017 #include "mitkProjectDataToVolumeFilter.h"
00018 #include "mitkFanBeamProjectData.h"
00019 #include "mitkReconstructionCGIncludes.h"
00020 
00021 //#define PI 3.14159265358979
00022 #define BLOCKNUM 7
00023 #define FANWINDOWSIZE 7
00024 
00025 
00026 
00027 
00028 
00029 
00036 class MITK_RECONSTRUCTION_CG_API mitkFbFbpSpeedUsingGpu: public mitkProjectDataToVolumeFilter  
00037 {
00038 public:
00039     template<class Ty> friend int t_ExecuteFbFbpUsingGpu(mitkFanBeamProjectData *input,mitkVolume *outdata,mitkFbFbpSpeedUsingGpu *self, Ty *a);
00040 
00041     MITK_TYPE(mitkFbFbpSpeedUsingGpu, mitkProjectDataToVolumeFilter)
00042 
00043     virtual void PrintSelf(ostream& os);
00044     
00045     mitkFbFbpSpeedUsingGpu();
00046 
00047     void SetFov(float m[4]);
00048 
00049 protected:
00050 
00051     virtual ~mitkFbFbpSpeedUsingGpu();
00052     
00053     virtual bool Execute();
00054 
00055 private:
00056     void initWindow();
00057   
00058     void initFBO();
00059 
00060     void initCG();
00061 
00062     void CheckForCgError(const char *situation);
00063 
00064     bool CreateTexture();
00065 
00066     void AttachFBO();
00067 
00068     void InputPrjectData(float *data);
00069 
00070     void ReadData(int slice, float *out);
00071 
00072     void SetTexMatrix(float angle);
00073 
00074     void EnableFshader();
00075 
00076     void EnableVshader();
00077 
00078     void DrawQuad(int h);
00079 
00080     void SetDtheta(float m) {dthetaDegree = m;}
00081 
00082     void SetFrustum(float zn,float zf,float zc, float detectorLength);
00083 
00084     void DestroyAll();
00085 
00086     void SetXrayNum(int m){xrayNum = m;}
00087     void SetAngleNum(int m){angleNum = m;}
00088 
00089     void SetWidth(int m){width = m;}
00090     void SetHeight(int m){height = m;}
00091     void SetImgslice(int m){imgslice = m;}
00092 
00093 private:
00094     int xrayNum;
00095     int angleNum;
00096 
00097     int width;
00098     int height;
00099     int imgslice;
00100 
00101 
00102     struct TexParam 
00103     {
00104         const char *name;
00105         int unit;
00106         int target;
00107         int tex;
00108     };
00109     std::vector<TexParam> m_texParams;
00110 
00111     float v[4];
00112     float dthetaDegree;
00113 
00114     float zNear;
00115     float zFar;     //L
00116     float zCenter;  //D
00117     float nearDetectorLengthX;
00118     GLfloat frustum[16];
00119 
00120     GLuint windowHandle;    
00121     CGcontext cgContext;
00122     CGprofile fProfile ,vProfile;
00123     CGprogram fProgram ,vProgram;
00124     CGparameter mvpMatrixParam,preResultTexParam,
00125                 texMatrixParam[BLOCKNUM];
00126     
00127     GLuint *projectDataID,  fbotex, *ResultID;
00128     GLuint fb;
00129     GLint m_preFboId;
00130 
00131     void _bindCurrentFBO();
00132     void _unBind();
00133     void _scanTexParams(CGprogram m_prog);
00134     void _setTexture(char *name, GLuint tex);
00135     void _bindTextures();
00136 
00137 
00138     mitkFbFbpSpeedUsingGpu(const mitkFbFbpSpeedUsingGpu&);
00139     void operator = (const mitkFbFbpSpeedUsingGpu&);
00140 
00141 };
00142 
00143 //#define DEFINED_mitkFbFbpUsingGpu
00144 
00145 #endif 
00146 

Generated on Tue Feb 25 15:00:37 2014 for MITK (Medical Imaging ToolKit) by  doxygen 1.4.3