www.pudn.com > GPUVision_5-13-05-2.zip > HarrisFilter.cpp, change:2005-05-03,size:1519b
#include "HarrisFilter.h"
using namespace std;
HarrisFilter::HarrisFilter(float threshold, CGcontext context) : GenericFilter(context){
_threshold = threshold;
assert(cgIsContext(_CGcontext));
cgGLEnableProfile(_fragmentProfile);
_program = cgCreateProgramFromFile(_CGcontext, CG_SOURCE, "Harris.cg",
_fragmentProfile, NULL, NULL);
if (!cgIsProgramCompiled(_program))
cgCompileProgram(_program);
_textureParam = cgGetNamedParameter(_program, "texture");
_thresholdParam = cgGetNamedParameter(_program, "threshold");
cgGLLoadProgram(_program);
cgGLDisableProfile(_fragmentProfile);
}
HarrisFilter::~HarrisFilter(){
cgDestroyProgram(this->_program);
}
void HarrisFilter::applyFilter(GPUVision *image1){
bool shouldBind = !image1->IsBound();
if(shouldBind) image1->Begin();
glClear(GL_COLOR_BUFFER_BIT);
cgGLBindProgram(_program);
cgGLSetTextureParameter(_textureParam, image1->IsReset()?image1->GetTextureID():image1->GetRenderedTextureID());
cgGLEnableTextureParameter(_textureParam);
cgGLSetParameter1f(_thresholdParam, _threshold);
cgGLEnableProfile(_fragmentProfile);
_DrawFull(image1->GetWidth(), image1->GetHeight());
cgGLDisableTextureParameter(_textureParam);
cgGLDisableProfile(_fragmentProfile);
image1->Flip();
if(shouldBind) image1->End();
}
void HarrisFilter::applyFilter(GPUVision *image1, GPUVision *image2){
cout << "HarrisFilter applyFilter 2" << endl;
this->GenericFilter::applyFilter(image1,image2);
}