GLSL mit Codeblocks (Mingw) verwenden



  • Hallo,
    ich hab in den letzten Tagen ein wenig das Web durchforstet um irgendwo die Erleuchtung zu finden, aber bisher Fehlanzeige. Mein Problem: Ich will die OpenGL Shading Language verwenden koennen ohne auf Extensions zurueckgreifen zu muessen. Die GLSL wurde mit OGL Version 2.0 eingefuehrt, unter Windows laeuft das ganze jedoch nur bis 1.4. Ich habe schon von GLEW und GLee gelesen, jedoch finde ich das Ganze ziemlich nervend. Gibt es fuer den Mingw vielleicht irgendwo Header und Libs fuer OpenGL>=2.0?
    Wenn es fuer Windows keine Loesung gibt, dann bezieh ich die Frage auch gleich noch auf die Mesa-Bibliothek fuer Linux. Werden die Header und Libs hier GPU-Spezifisch aufgeteilt oder besteht die Mesa-Bibliothek immer aus denselben? Afaik habe ich auf meinem Netbook (GPU: Intel GMA, Arch Linux) auch nur OpenGL Version 1.4... Shader gibt es nur als Extensions.



  • GLSL wurde iirc zum CoreFeature promoted mit OpenGL 3.0. Trotzdem ist es zumindest unter Windows nicht möglich dies direkt zu verwenden, da die WIndows Libraries OpenGL nur bis 1.5 verwenden. Ich verwende GLew und damit kann ich die Funktionen direkt verwenden, solange GLSL verfügbar ist. Und wo ist denn der Unterschied ob Du den Header und die Lib von GLew verwendest oder einen anderen? 😃
    Lad Dir einfach GLew runter und gut.. da brauchst nur ein glewInit(); irgendwo im Programm, nachdem der Context erzeugt wurde und Du hast Zugriff auf alle Extensions die für Deine Grafikkarte verfügbar sind.
    Zu Mesa kann ich nix sagen.
    rya.



  • Ich wollte ja keine zusaetzliche Lib sondern "DIE" OpenGL Library. ^^ Mesa hat ja afaik die gesamte OpenGL 2.1 API implementiert und man benoetigt nichts anderes als gl.h und die libgl. Auf jeden Fall werde ich mir Glew naeher ansehen, danke.

    Edit: GLSL gehoert doch zur Core Spezifikation von OGL seit Version 2.0 und ist seit (iirc) 1.4 als Extension verfuegbar. 😕



  • Corsair@01 schrieb:

    Ich wollte ja keine zusaetzliche Lib sondern "DIE" OpenGL Library. ^^ Mesa hat ja afaik die gesamte OpenGL 2.1 API implementiert und man benoetigt nichts anderes als gl.h und die libgl. Auf jeden Fall werde ich mir Glew naeher ansehen, danke.

    Edit: GLSL gehoert doch zur Core Spezifikation von OGL seit Version 2.0 und ist seit (iirc) 1.4 als Extension verfuegbar. 😕

    DIE OpenGL-Library gibt es nicht. Implementieren tun das die Graka-Hersteller.
    Zum Edit. Dann isses halt seit 2.0 Core-Feature^^. Aber Windoof enthält nur bis 1.5 rudimentären Support der mitgeliefert wird.
    rya.



  • Scorcher24 schrieb:

    Dann isses halt seit 2.0 Core-Feature^^. Aber Windoof enthält nur bis 1.5 rudimentären Support der mitgeliefert wird.
    rya.

    Ja, und dafuer gehoert M$ geschlagen. 😛

    Und klar, jeder Hersteller implementiert die OpenGL Specs in ihren eigenen Libs, aber die Header sind trotzdem immer dieselben. Das meinte ich urspruenglich, mit echtem OGL 2.0 Support braeuchte ich keine Extensions fuer GLSL.



  • Ja das stimmt schon. Aber ich finde das Arbeiten mit GLew recht angenehm. Musst keine Extensions direkt laden. Support für Shader musst auch bei DirectX abfragen. Von daher...
    rya.



  • Und schon ein Problem. Ich komm einfach nicht drauf was ich vergessen haben koennte:

    #include <GL/glew.h>
    #include <GL/gl.h>
    void Shader::Compile (void)
    {
        vsID = glCreateShader (GL_VERTEX_SHADER);
        fsID = glCreateShader (GL_FRAGMENT_SHADER);
    }
    

    Beim Linken spuckt mir Codeblocks dann den schoenen Fehler aus:

    obj\shader.o:shader.cpp:(.text+0xb)||undefined reference to \_\_imp\_\_\_\_glewCreateShader'| obj\\shader.o:shader.cpp:(.text+0x1c)||undefined reference to__imp____glewCreateShader'|
    ||=== Build finished: 2 errors, 0 warnings ===|

    Ich habe mein Programm mit der glew32.lib gelinkt, bei glewInit jammert der Linker ueberhaupt nicht. 😕



  • Gut ich hab' inzwischen rausbekommen, dass die .lib nix fuer mingw is sondern fuer MSVC, allerdings hat das konvertieren mit reimp auch nichts gebracht.
    Geloest habe ich das Problem jetzt indem ich - wie ich per Google gefunden habe - einfach mit der glew32.dll gelinkt habe. Das ist zwar nicht gerade im Sinne des Erfinders, aber ich spare mir erstmal weitere Scherereien - unter Linux kompiliert's eh wunderbar.


Log in to reply