www.pudn.com > GPUVision_5-13-05-2.zip > CalculateDVec.cpp


#include "CalculateDVec.h" 
 
using namespace std; 
 
CalculateDVec::CalculateDVec(CGcontext context) : MtxOps(context){ 
	_texWidth=1000;//2048;	 
	_texHeight=1000;//1950; 
	_width=10;//160000; 
	_height=10;//160000; 
 
	_cgFileName="mtx_merge_rgba.cg"; 
 
	this->_LoadCgPrograms(); 
	this->_initParameters();	 
} 
 
CalculateDVec::~CalculateDVec(){ 
} 
 
void CalculateDVec::_initParameters(){ 
	cgGLEnableProfile(_fragmentProfile); 
 
	_textureAParam = cgGetNamedParameter (_fragmentProgram, "a"); 
	if (_textureAParam == 0) { 
		printf("Texture param aquisition failed!"); 
		exit (1); 
	} 
 
	cgGLDisableProfile(_fragmentProfile); 
} 
 
 
void CalculateDVec::execute(GPUVision *outImg, int arg1){ 
	bool res = outImg->IsReset(); 
	bool unBind = false; 
	if(!outImg->IsBound()) { 
		outImg->Begin(); 
		unBind = true; 
	} 
	glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); 
 
	cgGLBindProgram(_fragmentProgram); 
	cgGLSetTextureParameter(_textureAParam, arg1); 
	 
	cgGLEnableTextureParameter(_textureAParam);	 
 
	cgGLEnableProfile(_fragmentProfile); 
 
	_DrawFull(outImg->GetWidth(), outImg->GetHeight()); 
 
	cgGLDisableTextureParameter(_textureAParam); 
	cgGLDisableProfile(_fragmentProfile); 
	outImg->Flip(); 
	if(unBind) { 
		outImg->End(); 
	} 
} 
 
GLfloat* CalculateDVec::interpreteResult (float *colBuffer) {	 
	GLfloat* ret = (GLfloat*)malloc(_height*_width*sizeof(GLfloat)); 
 
	int i; 
	for (i=0; i<(_height*_width); i++) { 
		// red channel is r-Vector 
		ret[i] = colBuffer[i*4+0];			 
	} 
 
	delete colBuffer; 
 
	return ret; 
} 
 
void CalculateDVec::showResultMtx(GPUVision* gpuVis, int m, int n){ 
	GLfloat* result; 
	result=interpreteResult(gpuVis->DownloadTexture()); 
	 
	_printOutMtx(result, m, n);	 
}