glDrawPixels を使用して描画された画像の上に選択ボックスを描画しようとしていますが、表示できません。ボックスの座標を表すために、マウス操作で更新する 4 つのグローバル整数 (最初の 2 つはクリック時、残りはマウスのドラッグ時) を用意し、描画関数で使用します。描画関数が呼び出されるたびにそれらを印刷しようとしたので、マウスがドラッグされると描画関数が呼び出され、4 つの値が少なくとも更新されることは確かです。私が主に持っているOpenGL呼び出しは次のとおりです。
glutInit(&argc, argv);
glutInitWindowSize(WINDOW_DIM, WINDOW_DIM);
glutInitWindowPosition(0, 0);
glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE);
glutCreateWindow("Window");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glClearColor(0.0, 0.0, 0.0, 1.0);
glDisable(GL_DEPTH_TEST);
glutMainLoop();
そして私の表示機能:
void display()
{
printf("calling display\n");
for(unsigned int i=0; i<WINDOW_DIM*WINDOW_DIM; ++i)
{
pixels[i]=colors[img[i]];
}
glClear(GL_COLOR_BUFFER_BIT);
glDrawPixels(WINDOW_DIM, WINDOW_DIM, GL_RGB, GL_FLOAT, (float*)pixels);
glutSwapBuffers();
if(upd_xmin!=0 || upd_ymin!=0 || upd_xmax!=0 || upd_ymax!=0)
{
glDrawBuffer(GL_FRONT);
glLogicOp(GL_XOR);
glEnable(GL_COLOR_LOGIC_OP);
printf("drawing selection\n");
printf("coords %d %d %d %d\n", upd_xmin, upd_ymin, upd_xmax, upd_ymax);
glColor3f(1.0, 1.0, 1.0);
glLineWidth(3.0);
glBegin(GL_LINE_LOOP);
glVertex2i(upd_xmin, upd_ymin);
glVertex2i(upd_xmin, upd_ymax);
glVertex2i(upd_xmax, upd_ymax);
glVertex2i(upd_xmax, upd_ymin);
glEnd();
glDisable(GL_COLOR_LOGIC_OP);
glDrawBuffer(GL_BACK);
}
}
私が言ったように、マウス イベントが発生したときにボックスの座標 (上記のコードの upd_x 変数と upd_y 変数) がどのように更新されるかを見て、問題はマウスとモーション機能にあるとは思いませんが、必要に応じてできますそれらも投稿します。