das gleiche Problem habe ich auch, möchte glew (1.5.8 als binaries und auch als source gedownloadet) mit Code::Blocks 10.05 verwenden und habe diese Postings genau durchgelesen, aber bei mir klappt's trotzdem nicht. Inzwischen habe ich ja verstanden, dass man die Source-Dateien selbst nochmal kompilieren soll und habe den oben beschriebenen Befehl gcc -c -O2 -Wall -W -DGLEW_STATIC -I../include -o glew32.a glew.c
gemacht, wie auch die Settings gesetzt. Dann noch
#define GLEW_STATIC
hinzugefügt.
Ich habe nicht wirklich verstanden, was ich da eingentlich gemacht habe - jedenfalls compiliert das Programm inzwischen wenigstens fehlerfrei.
Trotzdem bekomme ich einen Laufzeitfehler und Schuld ist immer wieder diese Zeile:
// erzeuge Shader Obeject int type = GL_VERTEX_SHADER; int vertexShader = glCreateShader(type); // <--
Es ist übrigens die gleiche Zeile, die vorher schon immer beim Kompilieren Probleme verursacht hatte. Hat jemand von euch eine Idee?
Nein, aber ich hab es jetzt mal schnell eingebaut, so wie es im Tutorial beschrieben ist: -------------------------- glutInit(&argc, argv); GLenum err = glewInit(); if (GLEW_OK != err) { /* Problem: glewInit failed, something is seriously wrong. */ fprintf(stderr, "Error: %s\n", glewGetErrorString(err));
} fprintf(stdout, "Status: Using GLEW %s\n", glewGetString(GLEW_VERSION)); --------------------------
Ergebnis ist: Error: Missing GL version Status: Using GLEW 1.5.8
Weißt Du, was das jetzt bedeutet bzw. was ich noch machen kann?
Hier ist mal der komplette Code ds Programms. Es tut nichts sinnvolles, alles nur zum Testen verschiedener Dinge gedacht. Es erzeugt keine Compilerfehler, stürzt aber zur Laufzeit nach der Ausgabe
Error: Missing GL version Status: Using GLEW 1.5.8
ab. "Hello World" wird natürlich auch nicht ausgegeben.
-------------------------- /* * hello.c * This is a simple, introductory OpenGL program. */
/* * Declare initial window size, position, and display mode
* (single buffer and RGBA). Open window with "hello" * in its title bar. Call initialization routines. * Register callback function to display graphics. * Enter main loop and process events. */ int main(int argc, char** argv) { glutInit(&argc, argv); GLenum err = glewInit(); if (GLEW_OK != err) { /* Problem: glewInit failed, something is seriously wrong. */ fprintf(stderr, "Error: %s\n", glewGetErrorString(err));
} fprintf(stdout, "Status: Using GLEW %s\n", glewGetString(GLEW_VERSION)); glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); glutInitWindowSize (250, 250); glutInitWindowPosition (100, 100); glutCreateWindow ("hello"); init (); glutDisplayFunc(display); glutMainLoop(); printf("Hello World\n"); return 0; /* ANSI C requires main to return int. */ } -----------------------------
Vermutliche Lösung: glewInit() und auch OpenGL-Befehle erst aufrufen nachdem das Fenster erzeugt wurde, also wahrscheinlich nach glutCreateWindow. Den erst dann hast du einen gültigen OpenGL-Kontext.
das war schon mal ein guter Tipp! glutCreateWindow() steht also jetzt schon vor glewInit() und damit bekomme ich dann auch die richtigen Ausgaben:
GL_VERSION 1.4.0 - Build 4.14.10.4020 Status: Using GLEW 1.5.8
Trotzdem stürzt das Programm wieder ab und das Fenster wird nicht gezeichnet.
Wenn ich die Zeile
int vertexShader = glCreateShader(type);
auf Kommentar setze, läuft das Programm anstandslos durch und das Fenster wird auch gezeichnet. Allerdings wird das "Hello World\n" unten in der vorletzten Zeile nicht ausgeführt.
Hier nochmal der aktuelle Quellcode:
-------------------- /* * hello.c * This is a simple, introductory OpenGL program. */
/* * Declare initial window size, position, and display mode
* (single buffer and RGBA). Open window with "hello" * in its title bar. Call initialization routines. * Register callback function to display graphics. * Enter main loop and process events. */ int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); glutInitWindowSize (250, 250); glutInitWindowPosition (100, 100); glutCreateWindow ("hello");
Diese OpenGL Version unterstützt noch keine Shader. Kann deine Grafikhardware überhaupt Shader? Ist der Treiber aktuell? Ist der gl.h-Header aktuell? (nein, ich weiß nicht wo man einen aktuellen Header bekommt....ich nutze Qt und da ist ein halbwegs aktueller Header dabei)
Edit: Als Alternative kannst du natürlich auch Shader mit Hilfe einer Extension benutzen, etwa GL_ARB_vertex_shader und GL_ARB_fragment_shader. Die funktionieren eigentlich genauso, der Unterschied ist aber das sämtliche Shader-spezifischen Funktionen und Parameter auf ARB enden.
inzwischen habe ich mir den neuesten Grafiktreiber installiert und auch die ARB-Ersatz-Befehle ausprobiert. Leider keine Verbesserung, die kann er auch nicht. Mein GLUT ist das aktuellste und GLEW auch, da bin ich mir sicher - vermutlich ist es tatsächlich der Rechner.
Jetzt bleibt nur noch, das Ganze auf einem anderen Rechner zu testen und hoffen, dass dann alles läuft.
Mich würde mal interessieren, was die anderen Codeblocks-Nutzer hier für Erfahrungen gemacht haben - hat jemand GLEW zu laufen bekommen?
es hat endlich geklappt - es lag tatsächlich an meinem Rechner (vermutlich die Grafikkarte). Jetzt habe ich alles auf einem anderen Rechner nochmal eingerichtet und jetzt läuft's.
Mitglieder in diesem Forum: 0 Mitglieder und 8 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.