Seite 1 von 1

glew Extension Check

Verfasst: 06.09.2009, 22:52
von Jonathan
Also ich habe folgendes Problem:

Code: Alles auswählen

GLenum err=glewInit();
if(GLEW_OK!=err)
    //nicht erfüllt

if(!GLEW_ARB_vertex_buffer_object)
   ///nicht erfüllt

if(!glGenBuffers)
   //erfüllt!
Beim Aufrufen von glGenBuffer stürzt das Programm ab. Aber eigentlich sollte die Funktion doch zu ARB_vertex_buffer_object gehören oder nicht?
Wieso also ist das so?

Re: glew Extension Check

Verfasst: 07.09.2009, 07:46
von Ingrater
Du wendest einen boolschen operator auf einen Funktionszeiger an, dass kann ja nicht gutgehen. glGenBuffers hat außerdem keinen Rückggabewert sollte etwas schieffgehen wird ein Error generiert

Code: Alles auswählen

GLuint Buffer;
glGenBuffers(1,&Buffer);
if(glGetError() != GL_NO_ERROR)
  //Fehler

Re: glew Extension Check

Verfasst: 07.09.2009, 10:37
von Jonathan
Ja die Sache ist ja, dass es direkt abstürzt, wenn man versucht glGenBuffers aufzurufen. Quasi ein ähnliches Verhalten, als sei glew gar nicht initialisiert.
Das Problem tritt übrigens nur auf einem Linux Rechner auf, unter Windows geht alles wunderbar. Normalerweise dürfte glGenBuffers ja auch überhaupt nicht abstürzen, es sei denn, der Funktionszeiger ist falsch.
Natürlich könnten theoretisch auch die Zeiger, die man der Funktion als Parameter übergibt ungültig sein, und die versucht dann darauf zuzugreifen, aber die Zeiger stimmen halt. Nur der Funktionsaufruf an sich macht Probleme.

Re: glew Extension Check

Verfasst: 07.09.2009, 19:17
von Sternmull

Code: Alles auswählen

GLenum err=glewInit();
if(GLEW_OK!=err)
//nicht erfüllt ==> Initialisierung von glew ist also fehlgeschalgen

if(!GLEW_ARB_vertex_buffer_object)
///nicht erfüllt ==> Das ging also auch nicht

if(!glGenBuffers)
//erfüllt! ==> glGenBuffers (sofern ein Funktionszeiger) ist also NULL
Soweit ich das sehe versucht du einen NULL-Zeiger als Funktionsadresse aufzurufen. Guck dir halt mal im Debugger an was genau passiert. Evtl. geht schon was bei der Initialisierung von OpenGL schief? Und das von Ingrater empfohlene glGetError() kann ich dir auch nur ans Herz legen.