Anzeige:
Ergebnis 1 bis 14 von 14

Thema: Shaderprogramme mit gcc unter Suse Linux 10

  1. #1
    Registrierter Benutzer Avatar von karx11erx
    Registriert seit
    17.11.2005
    Beiträge
    18

    Shaderprogramme mit gcc unter Suse Linux 10

    Hallo,

    ich versuche gerade, ein Programm unter Linux zum laufen zu bringen, das Shaderprogramme verwendet. Die Prototypen für die zug. Funktionen gibt es auch - ich weiß nur nicht, welche Bibliothek die Funktionen enthält.

    Ich gebe gcc beim Linken die Parameter -lGL und -lGLU mit, das reicht aber nicht.

    Was muss ich tun, damit ich die Shader-Erweiterungen gelinkt bekomme?

    Die Funktionen heißen z.B. glCreateShaderObjectARB, glCompileShaderARB, usw.

    karx11erx

  2. #2
    Registrierter Benutzer
    Registriert seit
    24.09.2005
    Beiträge
    66
    Mit den Extensions unter OpenGL ist das immer etwas kompliziert, da diese nicht direkt in der libGL.so enthalten sein dürfen. Um das zu umgehen hast du 3 Möglichkeiten:

    1.) Man erstellt einen Funktionspointer auf die entsprechenden Aufrufe und weist ihn bei der Initialisierung zu. Der Befehl ist vom verwendeten Toolkit abhängig, zb. bei SDL SDL_GL_GetProcAdress.

    2.) Du benutzt eine Bibliothek, die das gleich automatisch für dich macht, zum Beispiel die GLEW .

    3.) Du verwendest Funktionen die bereits im Standard enthalten sind, zb. kannst du statt glCreateShaderObjectARB glCreateShader verwenden, welches in OpenGL 2.0 enthalten ist. Das hat aber 2 Nachteile: Da unter Windows die libopengl32.a immer noch nur den OpenGL 1.1 Standard enthält, bist du auf Linux festgenagelt, wenn du nicht zusätzlich die GLEW verwendest. Weiterhin funktioniert das Ganze mit den Kernfunktionen etwas anders als mit der ARB-Extension, daher ist etwas Umschreibarbeit nötig.

  3. #3
    Registrierter Benutzer Avatar von karx11erx
    Registriert seit
    17.11.2005
    Beiträge
    18
    Vielen Dank für die Antwort. Wenn ich die Funktionspointer-Geschichte mache, muss ich mich doch auf irgendwas beziehen, oder? Unter Windows lade ich eine DLL und hole mir die Funktionen so, aber unter Linux? Könntest Du das genauer ausführen?

    Ich werde mir auf jeden Fall die OpenGL 2.0-Funktionen auch ansehen. Ich habe sowieso alles in einen Windows- und einen Linux-Code-Zweig aufgeteilt, da sollte ich nicht allzu große Schwierigkeiten haben.

  4. #4
    Registrierter Benutzer
    Registriert seit
    24.09.2005
    Beiträge
    66
    Ich hab mich mit der Funktionspointergeschichte nicht weiter beschäftigt, daher hab ich davon auch leider nicht besonders viel Ahnung. Ein gutes Beispiel wie sowas funktioniert, findest du aber in folgendem Tutorial:
    http://resourcecode.de/view.php?id=2164

    Dort wird mit Funktionspointern gearbeitet, die eben mit SDL_GL_GetProcAdress geholt werden.

  5. #5
    Registrierter Benutzer Avatar von karx11erx
    Registriert seit
    17.11.2005
    Beiträge
    18
    Vielen Dank. Mit OpenGL 2.0 muss ich doch im Grunde einfach nur das Suffix 'ARB' von allen entspr. Funktionsnamen weglassen, wenn ich Dich richtig verstanden habe. Einfacher geht's ja nicht mehr.

    Du sagst, beim Aufruf der Kernfunktionen wäre u.U. was zu ändern? Bei welcher z.B.? Ich habe ein paar verglichen, konnte aber keine Unterschiede feststellen.

    Die Funktionspointer-Geschichte ist übrigens sehr einfach, es wird allerdings die Verwendung der SDL vorausgesetzt. Man muß die F-Pointer passend deklarieren und dann die F-Adressen per SDL_GL_GetProcAddress() laden. Unter Windows nimmt man stattdesssen wglGetProcAddress, also reicht es für mich, das umzudefinieren, falls ich diese Mimik verwenden will.
    Geändert von karx11erx (19-11-2005 um 22:45 Uhr)

  6. #6
    Registrierter Benutzer
    Registriert seit
    24.09.2005
    Beiträge
    66
    Ich meinte mich zu erinnern, dass zb. glCreateShaderObjectARB ein glHandle, glCreateShader aber ein GLuint zurückgibt. Hab nochmal nachgeschaut, das ist per typedef beides ein unsigned int, anscheinend wurden die ARB-Extensions wirklich 1:1 in den Standard übernommen.

    Aber warum meinst du, dass man unter Windows wglGetProcAddress verwenden müsse? Ich dachte immer, SDL_GL_GetProcAddress ist einfach eine Wrapperfunktion, die unter Win32 wglGetProcAdress und unter X11 glXGetProcAdress aufruft. Mit diesen Funktionen solltest du das dann auch per Hand machen können, wenn du SDL nicht verwenden magst,

  7. #7
    Registrierter Benutzer Avatar von karx11erx
    Registriert seit
    17.11.2005
    Beiträge
    18
    Ich kenne keine andere Methode unter Windows, als die Funktionen per F-Pointer anzusprechen und die per GetProcAddress zu initialisieren. Statisch linken schien mir nicht zu gehen (ist ja eine System-DLL). Die Link-Lib zur DLL habe/finde ich jedenfalls nicht.

  8. #8
    Registrierter Benutzer Avatar von karx11erx
    Registriert seit
    17.11.2005
    Beiträge
    18
    Tja, so ein Pech: Der Linker kennt die OpenGL 2.0-Funktionen nicht - was mache ich jetzt? Und wieso kennt er die nicht? Ich dachte, unter Linux habe ich OpenGL 2.0?

  9. #9
    Registrierter Benutzer Avatar von Giuly
    Registriert seit
    28.04.2003
    Ort
    HB-Nord
    Beiträge
    201
    Zitat Zitat von karx11erx
    Tja, so ein Pech: Der Linker kennt die OpenGL 2.0-Funktionen nicht - was mache ich jetzt? Und wieso kennt er die nicht? Ich dachte, unter Linux habe ich OpenGL 2.0?
    Sicher? Lass mal glxgears laufen. Sonst versuch mal
    Code:
    -lGLcore -lGLw -lGLU -lGL
    MfG

  10. #10
    Registrierter Benutzer Avatar von karx11erx
    Registriert seit
    17.11.2005
    Beiträge
    18
    Vielen Dank, giuly - ich wußte schlicht nicht, wie die libs heissen.

    Edit: GLcore gibts bei mir nicht. In /usr/lib gibt es libGLcore.so.1 und libGLcore.so.1.0.7676 (keine libGLcore.la und keine libGLcore.so), aber das reicht meinem configure-script bei der Suche nach den GL-Libs nicht.
    Geändert von karx11erx (24-11-2005 um 14:55 Uhr)
    karx11erx
    D2X-XL and DLE-XP coder.
    Visit my Descent site or see my case mod.

    Wer Arbeit kennt, und danach rennt, und sich nicht drückt, der ist - ein Linux-Fan. :D

  11. #11
    Registrierter Benutzer Avatar von Giuly
    Registriert seit
    28.04.2003
    Ort
    HB-Nord
    Beiträge
    201
    Zitat Zitat von karx11erx
    Vielen Dank, giuly - ich wußte schlicht nicht, wie die libs heissen.

    Edit: GLcore gibts bei mir nicht. In /usr/lib gibt es libGLcore.so.1 und libGLcore.so.1.0.7676 (keine libGLcore.la und keine libGLcore.so), aber das reicht meinem configure-script bei der Suche nach den GL-Libs nicht.
    Versuch mal GLcore wegzulassen, sollte dann gehen.

  12. #12
    Registrierter Benutzer Avatar von karx11erx
    Registriert seit
    17.11.2005
    Beiträge
    18
    Probiere ich, danke.
    karx11erx
    D2X-XL and DLE-XP coder.
    Visit my Descent site or see my case mod.

    Wer Arbeit kennt, und danach rennt, und sich nicht drückt, der ist - ein Linux-Fan. :D

  13. #13
    Registrierter Benutzer
    Registriert seit
    24.09.2005
    Beiträge
    66
    Sehr seltsam, bei mir reicht das linken mit -lGL , dafür gibt es GLw nicht. Ich glaube auch nicht dass das der richtige Weg sein soll. Vielleicht wäre es doch sinnvoller, auch unter Linux mit F-Pointern zu arbeiten, was ohnehin die Unterschiede zum Win32-Code verringern würde.

  14. #14
    Registrierter Benutzer Avatar von karx11erx
    Registriert seit
    17.11.2005
    Beiträge
    18
    GLw gibt es bei mir auch nicht, und ich muß die *ARB-Funktionen per SDL_GetProcAddress() einbinden - linken der OpenGL 2.0-Funktionen tutet nicht.
    karx11erx
    D2X-XL and DLE-XP coder.
    Visit my Descent site or see my case mod.

    Wer Arbeit kennt, und danach rennt, und sich nicht drückt, der ist - ein Linux-Fan. :D

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •