OpenGl via SDL + Glew benutzen
-
Hoi,
Ich habe mich jetzt recht lange mit C++ beschäftigt ( ca 2 1/2) Jahre und dachte es wäre mal an der Zeit etwas grafisches auf die Beine zu stellen. Als erstes habe ich SDL benutzt und damit ein paar kleine Spiele erstellt, nix Großes nur ein paar
Tetris, Breakanoid und Tyrian(oder Spaceinvaders) Clones. Danach bin ich auf OpenGL + WGL umgestiegen und habe etwas an einer Engine herumgewerkelt doch ich finde das Event Handling von der Win32-Api irgendwie grausam und bin deshalb auf SDL + OpenGL umgestiegen. Bis dahin hat alles reibungslos geklappt. Nur jetzt habe ich eine Problem. Damit ich alle Funktionen von OpenGL 2.0 benutzen kann muss ich auf extensions zurückgreifen. Diese jedoch alle manuell einzubinden war mir auf die Dauer etwas zu umständlich. Die Lösung SDL + Glew. Und jetzt hänge ich seit Tagen fest.Wie erstellt man mit SDL ein Fenster, sodass man auf dieses mit Glew sachen rendern kann. In der Header von SDL steht, dass gl.h benötigt wird.
Ist diese jetzt in glew.h drinn?Kurz gesagt. Ich bekomme es nicht hin ein Project mit SDL und Glew zum laufen zu bekommen. Immer kamen Fehler inbezug auf SDL_GL_SwapBuffers(void) usw....
Wenn mir einer erklären könnte wie dies funktioniert wäre ich sehr dankbar.

Am besten wäre ein Beispiel. Sind nur 10 Zeilen oder so.
Eigentlich müsste es funktionieren, ich denke ich habe nur irgendetwas banales übersehen.
mfg Der Bock
-
Hier mal n kurzer Ausschnitt aus unserem code, vielleicht nützt es was
int sdlResult; GLenum glewResult; if ((sdlResult = SDL_Init(SDL_INIT_VIDEO)) < 0) throw Exception(std::string("SDL initialization failed: ") + SDL_GetError()); // SDL_Error(sdlResult) SDL_GL_LoadLibrary(0); // FSAA // SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1); // SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 2); SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); videoModes_ = SDL_ListModes(0, SDL_FULLSCREEN | SDL_OPENGL | SDL_HWSURFACE); if (!videoModes_) throw Exception("No supported video modes found"); std::cout << "Found the following video modes:" << std::endl; for (int i = 0; videoModes_[i]; ++i) std::cout << " " << videoModes_[i]->w << "x" << videoModes_[i]->h << std::endl; setVideoMode(800, 600, false); if ((glewResult = glewInit()) != GLEW_OK) { throw Exception(std::string("GLEW initialization failed: ") + reinterpret_cast<const char*>(glewGetErrorString(glewResult))); } std::cout << "Using GLEW " << glewGetString(GLEW_VERSION) << std::endl;nebenbei mal
#include <GL/glew.h> #include <SDL.h>und vielleuch tnoch ne gl.h includieren. dürfte auch im GL Ordner liegen
Danach kannste ganz einfach die üblichen OpenGL Befehle benutzen, ohne rücksicht auf SDL
-
... ich habe gerade noch etwas weiter in SDL_opengl.h gelesen udn dabei gemerkt, dass dadrin schon GL_VERSION_2_0 definiert ist.

Ich habe einen starken Verdacht, dass SDL sich alle extensions schon selber besorgt.
Wie gesagt, etwas banales übersehen -.-
-
Falls sich dein Verdacht bestätigen sollte schreib das mal, da unser momentanes Projekt SDL + GLEW verwendet !
-
So,
Ich bin mir ziemlich sicher, dass SDL sich alle Extensions schon selber holt.
Falls ich falsch liege weis mich bidde drauf hin, aber eigentlich sollte dies nicht der Fall sein.
#EDIT Man muss natürlich zusätzlich SDL_opengl.h einbinden
mfg