Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00023
00024 #include <stdlib.h>
00025 #ifdef __APPLE__
00026 #include "GLUT/glut.h"
00027 #else
00028 #include "GL/glut.h"
00029 #endif
00030 #include "BasicTestWin.h"
00031 #include "TestWinGlut.h"
00032
00034
00035 int main(int argc, char**argv)
00036 {
00037
00039 glutInit(&argc, argv);
00040
00041
00042
00043 TestWinGlut twg(argc, argv);
00044
00045
00046
00047
00048 TestWinGlut::Run();
00049
00050 return 0;
00051 }
00052
00054
00056
00057
00058
00062 TestWinGlut* TestWinGlut::_win[TestWinGlut::MAX_TEST_WIN_GLUT];
00063
00065
00067
00068
00069
00070 TestWinGlut::TestWinGlut(int argc, char**argv)
00071
00072 {
00073
00074 SetVerbose();
00075 ParseSiftParam(argc, argv);
00076
00077
00078 CreateGLUT();
00079
00080
00081 RunSiftGPU();
00082
00083
00084 }
00085
00086 TestWinGlut::~TestWinGlut()
00087 {
00088
00089 }
00090
00091
00092
00093 void TestWinGlut::CreateGLUT()
00094 {
00095 int id;
00096 glutInitDisplayMode (GLUT_RGBA | GLUT_DOUBLE);
00097 glutInitWindowSize (600,450);
00098 if(_win_x != -1) glutInitWindowPosition(_win_x, _win_y);
00099 id = glutCreateWindow ("SIFT_GPU");
00100 if(id>0)
00101 {
00102 if(id >=MAX_TEST_WIN_GLUT) exit(0);
00103
00104
00105 glutDisplayFunc (display);
00106 glutKeyboardFunc(keyboard);
00107 glutReshapeFunc (reshape);
00108 glutIdleFunc(idle);
00109 glutMotionFunc(motion);
00110 glutMouseFunc(button);
00111
00112 _win[id] = this;
00113 }
00114
00115 }
00116
00117 void TestWinGlut::idle()
00118 {
00119 int id = glutGetWindow();
00120 _win[id]->OnIdle();
00121 }
00122
00123 void TestWinGlut::keyboard(unsigned char key, int x, int y)
00124 {
00125 int id = glutGetWindow();
00126
00127 _win[id]->KeyInput(key);
00128 glutPostRedisplay();
00129 }
00130 void TestWinGlut::reshape(int w, int h)
00131 {
00132 int id = glutGetWindow();
00133 _win[id]->ReShape(w, h);
00134 glutPostRedisplay();
00135 }
00136 void TestWinGlut::display()
00137 {
00138 static int firstcall=1;
00139 int id = glutGetWindow();
00140 _win[id]->Display();
00141 glutSwapBuffers();
00142 if(firstcall ==0)
00143 {
00144 }else
00145 {
00146
00147 firstcall = 0;
00148 glutPostRedisplay();
00149 }
00150 }
00151
00152 void TestWinGlut::Run()
00153 {
00154 glutMainLoop();
00155 }
00156
00157 void TestWinGlut::motion(int x, int y)
00158 {
00159 int id = glutGetWindow();
00160 _win[id]->MoveMouse(x, y);
00161 }
00162
00163 void TestWinGlut::SetWindowTitle(char *title)
00164 {
00165 glutSetWindowTitle(title);
00166 }
00167
00168 void TestWinGlut::button(int button, int state,int x, int y)
00169 {
00170 int id = glutGetWindow();
00171 if (button == GLUT_LEFT_BUTTON)
00172 {
00173 if(state == GLUT_DOWN)
00174 _win[id]->StartMotion(x, y);
00175 else if (state == GLUT_UP)
00176 _win[id]->EndMotion();
00177 }
00178 }
00179
00180 void TestWinGlut::UpdateDisplay()
00181 {
00182 glutPostRedisplay();
00183 }
00184
00185 void TestWinGlut::SetDisplaySize(int w, int h)
00186 {
00187 glutReshapeWindow(w, h);
00188 }