Tôi đã tạo một lớp C++ (myPixmap
) để đóng gói công việc được thực hiện bởi bộ công cụ OpenGL GLUT. Hàm thành viên display()
của lớp chứa hầu hết mã được yêu cầu để thiết lập GLUT.Sử dụng OpenGL glutDisplayFunc trong lớp
void myPixmap::display()
{
// open an OpenGL window if it hasn't already been opened
if (!openedWindow)
{
// command-line arguments to appease glut
char *argv[] = {"myPixmap"};
int argc = 1;
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(640, 480);
glutInitWindowPosition(30, 30);
glutCreateWindow("Experiment");
glutDisplayFunc(draw);
glClearColor(0.9f, 0.9f, 0.9f, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
glutMainLoop();
openedWindow = true;
}
}
Chức năng hiển thị thông qua với glutDisplayFunc()
là một hàm thành viên của lớp:
void myPixmap::draw(void)
{
glDrawPixels(m,n,GL_RGB,GL_UNSIGNED_BYTE, pixel);
}
Tuy nhiên, gcc 4.2.1 trên Mac OS X 10.6.4 từ chối để biên dịch mã này, tuyên bố rằng:
argument of type 'void (myPixmap::)()' does not match 'void (*)()'
có cách nào để sử dụng bộ công cụ thị trường bất động bên trong một hàm thành viên của một lớp học, hay tôi phải gọi tất cả functio GLUT ns trong hàm main
của chương trình?
Cảm ơn Merlyn; đây là một giải pháp tuyệt vời. Tôi thấy rằng trong trường hợp của tôi, tôi đã có vấn đề với C liên kết vs C + + liên kết, vì vậy tôi đã phải sử dụng một chức năng toàn cầu như được hiển thị trong khối thứ hai của mã ví dụ. Cuối cùng tôi đã có thể biên dịch chương trình. Tôi không yêu cầu nhiều phiên bản, vì vậy đây không phải là vấn đề đối với tôi. –