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.