Seite 1 von 1

FBO's in OpenGL/C++ und Xcode

Verfasst: 16.05.2011, 14:35
von jaeggie
Hallo liebe Leute,

ich versuch gerade ein ein FBO zu erstellen. Habe auch schon mit der Software GLview übrprüft, ob GL_EXT_framebuffer_object unterstützt wird. Laut GLview ist alles im grünen Bereich und ich könnte eigentlich mit der Erstellung eines FBO anfangen.
Allerdings erkennt Xcode nicht die Funktionen, die zu FBO's gehören. Ich kann also gar nicht anfangen zu programmieren, da der Compiler schon meckert, wenn ich nur die Zeile

Code: Alles auswählen

glGenFramebuffersEXT(1, &fb);
hinzufüge.
Folgende Fehlermeldung: main.cpp:27: error: expected constructor, destructor, or type conversion before '(' token


Meine Frage ist: Muss ich noch irgendnen Header, Paket etc. includen, damit er die Funktionen erkennt. Finde im Netz irgendwie nix.
Wäre bombig, wenn ihr mir helfen könntet. Ich würd nämlich jetzt gern anfangen mit dem Proggen.

Re: FBO's in OpenGL/C++ und Xcode

Verfasst: 16.05.2011, 15:05
von joggel
Ist das die einzige OGL-Funktion mit "EXT" oder "ARB" als Endung die nicht funktioniert?

Re: FBO's in OpenGL/C++ und Xcode

Verfasst: 16.05.2011, 15:19
von jaeggie
Beide gehen nicht

Re: FBO's in OpenGL/C++ und Xcode

Verfasst: 16.05.2011, 15:21
von joggel
Dann solltest Du dir zB "glew" runterladen.

Re: FBO's in OpenGL/C++ und Xcode

Verfasst: 16.05.2011, 15:55
von jaeggie
Oje. Ich versteh aber nicht, warum. Wenn doch angeblich mein System alles unterstützt. Versuche jetzt glew in Xcode einzubinden. Ist aber voll das Durcheinander.

Re: FBO's in OpenGL/C++ und Xcode

Verfasst: 16.05.2011, 18:04
von kristof
Hast du denn schon andere OpenGL Funktionen aufgerufen? Eigentlich musst du nur das OpenGL Framework in dein Projekt einbinden und #include <OpenGL/OpenGL.h> als Header verwenden.

Re: FBO's in OpenGL/C++ und Xcode

Verfasst: 17.05.2011, 11:51
von glassbear
jaeggie hat geschrieben:Oje. Ich versteh aber nicht, warum. Wenn doch angeblich mein System alles unterstützt. Versuche jetzt glew in Xcode einzubinden. Ist aber voll das Durcheinander.
Die Standard-OpenGL Header Files enthalten nicht die Definitionen für alle möglichen Erweiterungen. Das ganze ist unabhängig davon, ob der Treiber eine Extension unterstützt. Letzteres sagt nur, dass der Treiber das kann. Um das zu benutzen, brauchst du auch korrekte Header-Files und Initialisierungs-Code. Beides nimmt dir zum Beispiel glew ab.

Ich kenn mich mit OSX nicht ganz so aus, eventuell gibt es da ein gl/glext.h, was das alles enthällt...

Re: FBO's in OpenGL/C++ und Xcode

Verfasst: 17.05.2011, 15:18
von joggel
jaeggie hat geschrieben:Oje. Ich versteh aber nicht, warum. Wenn doch angeblich mein System alles unterstützt. Versuche jetzt glew in Xcode einzubinden. Ist aber voll das Durcheinander.
Was heißt denn "Durcheinander" ?
Fehlermeldung?
Compiler- oder Link- Fehlermeldung?
Wie lauten diese?

Re: FBO's in OpenGL/C++ und Xcode

Verfasst: 18.05.2011, 17:23
von Youka
Um den Nutzen von OpenGL vereinfacht zu erklären:
OpenGL-Funktionen liegen auf der Grafikkarte (daher auch hardwarebeschleunigt) und müssen erst für dein Programm zugänglich gemacht werden. Dazu gibt es eine bestimmte Funktion, die je nach System anders heißt (in Windows wglGetProcAddress) und einen Zeiger auf die OpenGL-Funktion zurückgibt, wenn sie verfügbar ist, ansonsten einen NULL-Zeiger. Anhand einer Abfrage der möglichen Extensions mit z.B. glGetString(GL_EXTENSIONS) erfährst du Extension-Namen, die darauf hinweisen, welche Extension-Funktionen du importieren könntest.

Die OpenGL Header-Datei enthält die Standardfunktionen, die durch z.B. opengl32.dll ihren Zeiger bekommen. Alles weitere muss separat von der Grafikkarte geholt werden.
Glew erledigt diese Arbeit, indem es jede mögliche OpenGL-Funktion als NULL-Zeiger definiert und versucht, diese zuzuordnen.

Re: FBO's in OpenGL/C++ und Xcode

Verfasst: 18.05.2011, 21:46
von Jörg
Vorsicht, die Funktionen liegen nicht "auf der Grafikkarte", sondern werden vom jeweiligen OpenGL-Treiber exportiert (meist eine normale shared library), abzufragen ueber eglGetProcAddress bzw. wglGetProcAddress, wenn man auf Windows laeuft.