⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fftcg.cpp

📁 选自<gpu gemes 2>,用gpu实现快速傅立叶变换
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		DispTexR1 = cgGetNamedParameter(dfProgram, "Real1");
		CheckCgError();
		DispTexI1 = cgGetNamedParameter(dfProgram, "Imag1");
		CheckCgError();
		DispTexR2 = cgGetNamedParameter(dfProgram, "Real2");
		CheckCgError();
		DispTexI2 = cgGetNamedParameter(dfProgram, "Imag2");
		CheckCgError();
		DispInvEnergy = cgGetNamedParameter(dfProgram, "InvEnergy");
		CheckCgError();
	}
}

/*************************[MAN-BEG]*****************************************
*
* NAME:
*	FFT::CheckCgError
*
* DESCRIPTION:
*	Check for Cg errors
*
* FORMAL PARAMETERS:
*	none
*
* RETURNS:
*	none
*
* REVISION HISTORY:
* Rev     When      Who         What
* V1      15Dec2004 Thilaka     Created.
**************************[MAN-END]*****************************************/
void FFT::CheckCgError(void)
{
	CGerror err = cgGetError();
	
	if (err != CG_NO_ERROR) {
		cerr << "CG error: " << cgGetErrorString(err) << endl;
		exit(1);
	}
}

/*************************[MAN-BEG]*****************************************
*
* NAME:
*	FFT::EnableFFTFragmentProgramX
*
* DESCRIPTION:
*	Enable all fragment programs for x FFT depending on the method
*
* FORMAL PARAMETERS:
*	none
*
* RETURNS:
*	none
*
* REVISION HISTORY:
* Rev     When      Who         What
* V1      15Dec2004 Thilaka     Created.
**************************[MAN-END]*****************************************/
void FFT::EnableFFTFragmentProgramX(void)
{
	cgGLEnableProfile(xfProfile);
	CheckCgError();	
	if (CurrentButterflyStage < xCutOff) {
		cgGLBindProgram(xfProgram1);
		CheckCgError();
		cgGLEnableTextureParameter(xBaseTexR1_1);
		CheckCgError();
		cgGLEnableTextureParameter(xBaseTexI1_1);
		CheckCgError();
		cgGLEnableTextureParameter(xBaseTexR2_1);
		CheckCgError();
		cgGLEnableTextureParameter(xBaseTexI2_1);
		CheckCgError();
		cgGLEnableTextureParameter(xButterflyLookupI_1);
		CheckCgError();
		cgGLEnableTextureParameter(xButterflyLookupWR_1);
		CheckCgError();
		cgGLEnableTextureParameter(xButterflyLookupWI_1);
		CheckCgError();
	}
	else {
		cgGLBindProgram(xfProgram2);
		CheckCgError();
		cgGLEnableTextureParameter(xBaseTexR1_2);
		CheckCgError();
		cgGLEnableTextureParameter(xBaseTexI1_2);
		CheckCgError();
		cgGLEnableTextureParameter(xBaseTexR2_2);
		CheckCgError();
		cgGLEnableTextureParameter(xBaseTexI2_2);
		CheckCgError();
	}
}

/*************************[MAN-BEG]*****************************************
*
* NAME:
*	FFT::DisableFFTFragmentProgramX
*
* DESCRIPTION:
*	Disables all fragment programs for x FFT depending on the method
*
* FORMAL PARAMETERS:
*	none
*
* RETURNS:
*	none
*
* REVISION HISTORY:
* Rev     When      Who         What
* V1      15Dec2004 Thilaka     Created.
**************************[MAN-END]*****************************************/
void FFT::DisableFFTFragmentProgramX(void)
{
	if (CurrentButterflyStage < xCutOff) {
		cgGLDisableTextureParameter(xBaseTexR1_1);
		CheckCgError();
		cgGLDisableTextureParameter(xBaseTexI1_1);
		CheckCgError();
		cgGLDisableTextureParameter(xBaseTexR2_1);
		CheckCgError();
		cgGLDisableTextureParameter(xBaseTexI2_1);
		CheckCgError();
		cgGLDisableTextureParameter(xButterflyLookupI_1);
		CheckCgError();
		cgGLDisableTextureParameter(xButterflyLookupWR_1);
		CheckCgError();
		cgGLDisableTextureParameter(xButterflyLookupWI_1);
		CheckCgError();
	}
	else {
		cgGLDisableTextureParameter(xBaseTexR1_2);
		CheckCgError();
		cgGLDisableTextureParameter(xBaseTexI1_2);
		CheckCgError();
		cgGLDisableTextureParameter(xBaseTexR2_2);
		CheckCgError();
		cgGLDisableTextureParameter(xBaseTexI2_2);
		CheckCgError();
	}
	cgGLDisableProfile(xfProfile);
	CheckCgError();
}

/*************************[MAN-BEG]*****************************************
*
* NAME:
*	FFT::InitCgPrograms
*
* DESCRIPTION:
*	Initialize all shaders
*
* FORMAL PARAMETERS:
*	none
*
* RETURNS:
*	none
*
* REVISION HISTORY:
* Rev     When      Who         What
* V1      15Dec2004 Thilaka     Created.
**************************[MAN-END]*****************************************/
void FFT::InitCgPrograms(void)
{
	Context = cgCreateContext();
	CheckCgError();
	InitFFTFragmentCgX1();
	InitFFTFragmentCgX2();
	InitFFTFragmentCgY1();
	InitFFTFragmentCgY2();
	InitDispFragmentCg();
}

/*************************[MAN-BEG]*****************************************
*
* NAME:
*	FFT::DestroyCgPrograms
*
* DESCRIPTION:
*	Destroy all shaders
*
* FORMAL PARAMETERS:
*	none
*
* RETURNS:
*	none
*
* REVISION HISTORY:
* Rev     When      Who         What
* V1      15Dec2004 Thilaka     Created.
**************************[MAN-END]*****************************************/
void FFT::DestroyCgPrograms(void)
{
	cgDestroyProgram(xfProgram2);
	cgDestroyProgram(yfProgram2);
	cgDestroyProgram(xfProgram1);
	cgDestroyProgram(yfProgram1);
	cgDestroyProgram(dfProgram);
	cgDestroyContext(Context);
}

/*************************[MAN-BEG]*****************************************
*
* NAME:
*	FFT::EnableFFTFragmentProgramY
*
* DESCRIPTION:
*	Enable all fragment programs for y FFT depending on the method
*
* FORMAL PARAMETERS:
*	none
*
* RETURNS:
*	none
*
* REVISION HISTORY:
* Rev     When      Who         What
* V1      15Dec2004 Thilaka     Created.
**************************[MAN-END]*****************************************/
void FFT::EnableFFTFragmentProgramY(void)
{
	cgGLEnableProfile(yfProfile);
	CheckCgError();	
	if (CurrentButterflyStage < yCutOff) {
		cgGLBindProgram(yfProgram1);
		CheckCgError();
		cgGLEnableTextureParameter(yBaseTexR1_1);
		CheckCgError();
		cgGLEnableTextureParameter(yBaseTexI1_1);
		CheckCgError();
		cgGLEnableTextureParameter(yBaseTexR2_1);
		CheckCgError();
		cgGLEnableTextureParameter(yBaseTexI2_1);
		CheckCgError();
		cgGLEnableTextureParameter(yButterflyLookupI_1);
		CheckCgError();
		cgGLEnableTextureParameter(yButterflyLookupWR_1);
		CheckCgError();
		cgGLEnableTextureParameter(yButterflyLookupWI_1);
		CheckCgError();
	}
	else {
		cgGLBindProgram(yfProgram2);
		CheckCgError();
		cgGLEnableTextureParameter(yBaseTexR1_2);
		CheckCgError();
		cgGLEnableTextureParameter(yBaseTexI1_2);
		CheckCgError();
		cgGLEnableTextureParameter(yBaseTexR2_2);
		CheckCgError();
		cgGLEnableTextureParameter(yBaseTexI2_2);
		CheckCgError();
	}
}

/*************************[MAN-BEG]*****************************************
*
* NAME:
*	FFT::DisableFFTFragmentProgramY
*
* DESCRIPTION:
*	Disables all fragment programs for y FFT depending on the method
*
* FORMAL PARAMETERS:
*	none
*
* RETURNS:
*	none
*
* REVISION HISTORY:
* Rev     When      Who         What
* V1      15Dec2004 Thilaka     Created.
**************************[MAN-END]*****************************************/
void FFT::DisableFFTFragmentProgramY(void)
{
	if (CurrentButterflyStage < yCutOff) {
		cgGLDisableTextureParameter(yBaseTexR1_1);
		CheckCgError();
		cgGLDisableTextureParameter(yBaseTexI1_1);
		CheckCgError();
		cgGLDisableTextureParameter(yBaseTexR2_1);
		CheckCgError();
		cgGLDisableTextureParameter(yBaseTexI2_1);
		CheckCgError();
		cgGLDisableTextureParameter(yButterflyLookupI_1);
		CheckCgError();
		cgGLDisableTextureParameter(yButterflyLookupWR_1);
		CheckCgError();
		cgGLDisableTextureParameter(yButterflyLookupWI_1);
		CheckCgError();
	}
	else {
		cgGLDisableTextureParameter(yBaseTexR1_2);
		CheckCgError();
		cgGLDisableTextureParameter(yBaseTexI1_2);
		CheckCgError();
		cgGLDisableTextureParameter(yBaseTexR2_2);
		CheckCgError();
		cgGLDisableTextureParameter(yBaseTexI2_2);
		CheckCgError();
	}
	cgGLDisableProfile(yfProfile);
	CheckCgError();
}

/*************************[MAN-BEG]*****************************************
*
* NAME:
*	FFT::EnableDispFragmentProgram
*
* DESCRIPTION:
*	Enables the fragment program for displaying the result.
*
* FORMAL PARAMETERS:
*	none
*
* RETURNS:
*	none
*
* REVISION HISTORY:
* Rev     When      Who         What
* V1      15Dec2004 Thilaka     Created.
**************************[MAN-END]*****************************************/
void FFT::EnableDispFragmentProgram(void)
{
	cgGLEnableProfile(dfProfile);
	CheckCgError();	
	cgGLBindProgram(dfProgram);
	CheckCgError();
	cgGLEnableTextureParameter(DispTexR1);
	CheckCgError();
	cgGLEnableTextureParameter(DispTexI1);
	CheckCgError();
	cgGLEnableTextureParameter(DispTexR2);
	CheckCgError();
	cgGLEnableTextureParameter(DispTexI2);
	CheckCgError();
}

/*************************[MAN-BEG]*****************************************
*
* NAME:
*	FFT::DisableDispFragmentProgram
*
* DESCRIPTION:
*	Disables the fragment program for displaying the result.
*
* FORMAL PARAMETERS:
*	none
*
* RETURNS:
*	none
*
* REVISION HISTORY:
* Rev     When      Who         What
* V1      15Dec2004 Thilaka     Created.
**************************[MAN-END]*****************************************/
void FFT::DisableDispFragmentProgram(void)
{
	cgGLDisableTextureParameter(DispTexR1);
	CheckCgError();
	cgGLDisableTextureParameter(DispTexI1);
	CheckCgError();
	cgGLDisableTextureParameter(DispTexR2);
	CheckCgError();
	cgGLDisableTextureParameter(DispTexI2);
	CheckCgError();
	cgGLDisableProfile(dfProfile);
	CheckCgError();
}




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -