Ich habe eine C++ - Klasse (myPixmap
) erstellt, um die Arbeit von OpenGL GLUT-Toolkit kapseln. Die display()
Mitgliedsfunktion der Klasse enthält den größten Teil des Codes, der zum Einrichten von GLUT erforderlich ist.Mit OpenGL GlutDisplayFunc innerhalb der Klasse
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;
}
}
Die Funktionsanzeige zu glutDisplayFunc()
geben wird, ist ein weiteres Mitglied Funktion der Klasse:
void myPixmap::draw(void)
{
glDrawPixels(m,n,GL_RGB,GL_UNSIGNED_BYTE, pixel);
}
jedoch gcc 4.2.1 auf Mac OS X 10.6.4 verweigert diesen Code zu kompilieren und behauptete, dass:
argument of type 'void (myPixmap::)()' does not match 'void (*)()'
gibt es eine Möglichkeit, die GLUT-Toolkit innerhalb einer Elementfunktion einer Klasse zu verwenden, oder muss ich rufe alle GLUT functio ns innerhalb der main
Funktion des Programms?
Dank Merlyn; Das ist eine ausgezeichnete Lösung. Ich fand, dass ich in meinem Fall Probleme mit C-Verknüpfung vs C++ - Verknüpfung hatte, also musste ich eine globale Funktion verwenden, wie in Ihrem zweiten Beispielcode-Block gezeigt. Endlich konnte ich das Programm kompilieren. Ich benötige nicht mehrere Instanzen, daher ist dies für mich noch kein Problem. –