1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| void test() {
const int W = 800, H = 600;
const GLsizei SELECT_BUFFER_SIZE = 512;
GLuint selectBuffer[SELECT_BUFFER_SIZE];
glViewport(0,0,W,H);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0,W,0,H,-1,1);
GLint viewport[4];
GLfloat proj[16];
glGetIntegerv(GL_VIEWPORT,viewport);
glGetFloatv(GL_PROJECTION_MATRIX,proj);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);
glSelectBuffer(SELECT_BUFFER_SIZE,selectBuffer);
glRenderMode(GL_SELECT);
glInitNames();
glPushName(0);
glEnable(GL_STENCIL_TEST);
glStencilOp(GL_KEEP,GL_KEEP,GL_KEEP);
glStencilFunc(GL_NEVER,0,0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPickMatrix(W/2,H/2,W,H,viewport);
glMultMatrixf(proj);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glPointSize(10);
glColor3f(1,1,1);
glLoadName(1);
glBegin(GL_POINTS);
glVertex2f(W/2,H/2);
glEnd();
glLoadName(2);
glBegin(GL_POINTS);
glVertex2f(W/2+20,H/2);
glEnd();
glFlush();
SDL_GL_SwapBuffers();
std::cout << "nbHits: " << glRenderMode(GL_RENDER) << '\n';
glMatrixMode( GL_PROJECTION );
glLoadMatrixf(proj);
glMatrixMode( GL_MODELVIEW );
} |
Partager