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);
}