Dies ist eine statische Kopie unseres alten Forums. Es sind keine Interaktionen möglich.
This is a static copy of our old forum. Interactions are not possible.

Mac

Papa

  • "Mac" is male
  • "Mac" started this thread

Posts: 645

Date of registration: Oct 17th 2002

Location: Hannover

Occupation: IT Freelancer

1

Friday, March 23rd 2007, 10:44pm

OpenGL/GLUT in C++ Klasse kapseln

Nabend!

Ich suche nach einem Weg ein GLUT Window in eine C++ Klasse zu kapseln. Eigentlich
mehr ein OpenSG Window mit GLUT. Aber sollte auf den selben Ansatz hinaus laufen.
Sprich ich habe eine Klasse in der ich mir meine display, reshape und so weiter Methoden
definiere. Diese müssen nun via glutReshapeFunc etc. dem GLUT Window zugeordnet werden. Außerhalb einer Klasse funktioniert das wunderbar, jedoch haben Methoden eines Objektes einen anderen Typ. Somit kann ich meine Funktionen nicht ohne weiteres verwenden.

Im Augenblick beschäftige ich mich noch mit "Member Function Pointers". Bisher aber wenig erfolgreich.

Ich kann die Methoden verwenden, wenn ich sie als static deklariere. Das reduziert das ganze allerdings auf maximal eine Instanz. Das ist nicht erwünscht.

Hat jemand von euch eine Idee? Bzw. ne Ahnung wie "Member Function Pointers" in diesem Fall anzuwenden sind? Oder vielleicht ein C++ Framework? Ich hab mir diesen glutMaster angesehen, jedoch funktionieren nicht einmal die Beispiele. Das schreckt etwas ab.

Gruß
Mac

denial

Erfahrener Schreiberling

  • "denial" is male

Posts: 394

Date of registration: Feb 18th 2003

Location: Göttingen

Occupation: Linux Coder (ex Mathe SR Inf Student)

2

Friday, March 23rd 2007, 11:47pm

RE: OpenGL/GLUT in C++ Klasse kapseln

Hab zwar noch nie mit GLUT gearbeitet, aber ich würde da sowas hier machen:

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class WindowBasis
{
protected:
  WindowBasis(char *name) {
    id = glutCreateWindow(name);
    windows[id]=this;
    glutReshapeFunc(reshapeCallback);
  }
  ~WindowBasis() {
    glutDestroyWindow(id);
    windows.erase(id);
  }
  virtual void doReshape(int, int) = 0;
private:
  static void reshapeCallback(int,int);
  static std::map<int,WIndowBasis *> windows;

  int id;
}

void WindowBasis::reshapeCallback(int w,int h) {
  windows[glutGetWindow()]->doReshape(w,h);
}

Mac

Papa

  • "Mac" is male
  • "Mac" started this thread

Posts: 645

Date of registration: Oct 17th 2002

Location: Hannover

Occupation: IT Freelancer

3

Saturday, March 24th 2007, 12:26am

RE: OpenGL/GLUT in C++ Klasse kapseln

ah danke. Auf Wrapper Methoden bin ich inzwischen auch schon gekommen.
Dein Ansatz ist allerdings eleganter ^^