[Closed]OpenGL: Unhandled Exception nach glCreateShader
-
Hallo!
Ich versuche gerade einen Shader zu programmieren. Ich benutze Visual Studio C++ und die Glew Headers/Libaries, sowie freeglut. Sobald ich im programm die Funktion glCreateShader aufrufe und ich den Quelltext compile und linke bekomme ich keine Fehler. Beim Ausführen gibt es mir folgende Fehlermeldung aus:Unhandled exception at 0x00000000 in opengl.exe: 0xC0000005: Access violation reading location 0x00000000.
Was könnte hier das Problem sein? Die Entwicklungsumgebung sollte ja korrekt konfiguriert sein, sonst gäbe es bereits Fehler beim compilen/linken.
Dies ist ein Ausschnitt meines Quelltextes, damit ihr seht wo ich die Funktion aufrufe:
glutInit(&argc, argv); setRenderStats(); unsigned int VertexShader = glCreateShader(GL_VERTEX_SHADER); glutMainLoop();Ich hoffe dass ich genug informationen gegeben habe und das Problem schnell gelöst ist.
Grüsse
Grave
-
Probiers mal mit Durchsteppen im Debugger und schau nach, in welcher Zeile es knallt. Zu den 4 Zeilen kann man kaum etwas sinnvolles sagen.
-
das problem ist, dass es ohne die zeile:
unsigned int VertexShader = glCreateShader(GL_VERTEX_SHADER);ohne probleme funktioniert. der debugger zeigt auch genau auf diese zeile.
ich glaube nicht dass es hilft, wenn ich den ganzen quelltext poste, da ich auch nach dem aukommentieren der "unnötigen" funktionen immer noch den selben fehler bekomme.
-
Hi!
Hast du glut sowie glew korrekt intialisiert vor deinem Aufruf von glCreateShader? Versuch den Aufruf mal an einer anderen Stelle in deinem Code wo du sicher bist, das alles funktioniert. Bei mir war das letztens der Fehler.KaPtainCugel
-
glutInit(&argc, argv);
glewInit();beides steht vor dem aufruf von glCreateShader
könnte es sein, dass das problem bei der opengl version von windows ist? also dass ich gar nicht direkt auf diese funktionen zugreiffen kann, sondern mittels wglGetProcAddress die adresse ermitteln muss?
[edit]
http://www.lighthouse3d.com/opengl/glsl/index.php?ogloverviewbei diesem tutorial hat es zwei möglichkeiten. die erste verwendet extensions und die zweite direkt opengl 2.0
nach glewInit() kann man dann laut dem tutorial testen, ob alles funktioniert:
glewInit(); if (GLEW_ARB_vertex_shader && GLEW_ARB_fragment_shader) printf("Ready for GLSL\n"); else { printf("Not totally ready :( \n"); exit(1); }für extensions und:
glewInit(); if (glewIsSupported("GL_VERSION_2_0")) printf("Ready for OpenGL 2.0\n"); else { printf("OpenGL 2.0 not supported\n"); exit(1); }für opengl 2.0
beide möglichkeiten schlagen bei mir fehl. dies würde bedeuten dass GLEW nicht richtig funkioniert, oder?
-
nach etwas herumtüfteln funktioniert es endlich!
ich habe ehrlich gesagt keine ahnung wieso...evtl. hat es etwas damit zu tun, dass ich erst setRenderStats() aufgerufen habe und erst danach glCreateShader.
ich danke vielmals für eure antworten!