glVertexPointer und glVertexAttribPointer



  • Hi,

    was ist der Unterschied zwischen glVertexPointer und glVertexAttribPointer? Irgendwie sehe ich da nicht so richtig durch.



  • glVertexPointer = fixed function pipeline, veraltet
    glVertexAttribPointer = generisches Vertex Attribut, aktuell



  • Wie ich das bei OpenGL doch hasse.
    Dieser große Cut zwischen OpenGL 2 und 3 (bzw. ab 3.2 dann richtig)...

    Warum wurden z.B. Displaylist's gelöscht? Selbst ein Static-VBO wird nie die Geschwindigkeit von einer Displaylist erreichen... naja, nur mal so als Anmerkung...



  • GLSL schrieb:

    Wie ich das bei OpenGL doch hasse.
    Dieser große Cut zwischen OpenGL 2 und 3 (bzw. ab 3.2 dann richtig)...

    Das war sowas von Zeit...

    GLSL schrieb:

    Warum wurden z.B. Displaylist's gelöscht? Selbst ein Static-VBO wird nie die Geschwindigkeit von einer Displaylist erreichen... naja, nur mal so als Anmerkung...

    Wär interessant wenn du diese Behauptung auch belegen könntest. Vor allem würd mich interessieren, wie du überhaupt Displaylists sinnvoll mit VBOs vergleichen willst und ob du VAOs in deinem Vergleich bedacht hast.
    Aber ein Mechanismus wie die CommandLists in Direct3D wär in der Tat nice to have, dann könnte man endlich auch in OpenGL mal über sowas wie multithreaded Rendering nachdenken...



  • Meiner Meinung nach, hat man trotzdem vieles falsch gemacht.
    Vorher waren Shader kaum von Bedeutung (okay vllt. leicht übertrieben) und nun kann man nicht mal mehr ein Dreieck ohne Shader rendern.

    Shader sind wichtig und der Wandel ist auch ein Schritt in die Richtige Richtung aber denoch hat man meiner Meinung nach zu viel entfernt. glBegin usw. gehören weg aber das man nicht mal mehr Matritzen im normalen ogl handeln kann... naja.

    Außerdem ist dieser Cut eh zu schleppend.
    Bei 3.0 hat man vieles gemacht aber viel vergaß man auch. 3.1 hat da weiter gemacht wo 3.0 aufgehört hat und 3.2 war dann quasi das eigentliche Ziel von 3.0 erreicht.

    Allein schon, weil VBO's mehr Datenmengen über den Bus verschicken (also CPU zur GPU). Mach einfach einen kurzen Test mit einer Displaylist und VBO - von mir aus mit 1Mio Polygones. Die Displaylist wird immer gewinnen...

    Für Static-Draw's ist es mir ehrlich gesagt zu Aufwendig VBO's mit Buffer, Subbuffer usw. zu erzeugen, wenn ich das bei einer Displaylist mit 3 Zeilen komplett fertig habe (genLists, NewLists, EndLists).

    Ich mag OpenGL deutlich mehr als DX aber Luft nach oben gibts trotzdem noch genug aber irgendwie glaub ich nicht mehr dran.
    Vor 2 Jahren kam OpenGL 4.0 raus, seitdem gab es 2 updates (4.1, 4.2), welche aber doch mehr als überschaubar sind.



  • GLSL schrieb:

    Meiner Meinung nach, hat man trotzdem vieles falsch gemacht.
    Vorher waren Shader kaum von Bedeutung (okay vllt. leicht übertrieben) und nun kann man nicht mal mehr ein Dreieck ohne Shader rendern.

    Also wieso Shader kaum von Bedeutung gewesen sein sollen, kann ich nicht nachvollziehen (vor allem: was genau meinst du mit "vorher"). Grafikkarten verstehen doch schon schon seit über 10 Jahren nichts anderes mehr als Shader. Die Tatsache dass OpenGL diese Entwicklung verschlafen hat ist doch, was beinahe dafür gesorgt hätte dass es von der Bildfläche verschwindet!?

    GLSL schrieb:

    Shader sind wichtig und der Wandel ist auch ein Schritt in die Richtige Richtung aber denoch hat man meiner Meinung nach zu viel entfernt. glBegin usw. gehören weg aber das man nicht mal mehr Matritzen im normalen ogl handeln kann... naja.

    Es macht absolut keinen Sinn irgendwelche Matritzen in der Grafik API zu haben, da es unklar wäre, was diese Matritzen genau bedeuten sollten.

    GLSL schrieb:

    Außerdem ist dieser Cut eh zu schleppend.
    Bei 3.0 hat man vieles gemacht aber viel vergaß man auch. 3.1 hat da weiter gemacht wo 3.0 aufgehört hat und 3.2 war dann quasi das eigentliche Ziel von 3.0 erreicht.

    Ja, viel zu schleppend und vor allem halbherzig, erst mit 3.3 ist OpenGL imo wieder einigermaßen brauchbar. Man müsste die API mal komplett wegwerfen und von Grund auf neu machen, so wie das mit gewissen anderen entsprechenden APIs regelmäßig passiert ist, aber jegliche Versuche dahin sind ja leider gescheitert...

    GLSL schrieb:

    Allein schon, weil VBO's mehr Datenmengen über den Bus verschicken (also CPU zur GPU). Mach einfach einen kurzen Test mit einer Displaylist und VBO - von mir aus mit 1Mio Polygones. Die Displaylist wird immer gewinnen...

    Wieso sollten Displaylisten weniger Daten übertragen, das macht absolut keinen Sinn, vor allem frag ich mich wie du den Datentransfer überhaupt gemessen hast. Die Möglichkeit, den Datentransfer genau so zu steuern wie man ihn haben will, ist doch gerade erst was VBOs ausmacht; mit Displaylisten ist das unmöglich!? Displaylisten haben potentiell einen kleinen Vorteil was den Driver/API Overhead angeht, vor allem seit es VAOs gibt schätz ich den jetzt aber mal als eher unwesentlich ein.


  • Mod

    dot schrieb:

    Wär interessant wenn du diese Behauptung auch belegen könntest. Vor allem würd mich interessieren, wie du überhaupt Displaylists sinnvoll mit VBOs vergleichen willst und ob du VAOs in deinem Vergleich bedacht hast.

    VBOs sind nur fuer vertices und eine reine GPU optimierung.
    display listen haben weit mehr informationen die treiber zur optimierung nutzen koennen, qausi das was du von einer engine die nur statische scenes anzeigt erwarten wuerdest.

    Aber ein Mechanismus wie die CommandLists in Direct3D wär in der Tat nice to have, dann könnte man endlich auch in OpenGL mal über sowas wie multithreaded Rendering nachdenken...

    du meinst die dinger die es in directx 1 und 2 und auf xbox gab?



  • Doch es macht Sinn Matritzen in der API zu haben.
    Du wirst nie alle Operationen auf dem GPU ausführen und es werden solche Funktionen gebraucht.
    Klar muss man sowas nicht direkt in die API verlegen aber OpenGL hatte sowas schon.

    DX hat auch viele Funktionen die nicht unbedingt in der API sein müssen aber letztendlich gibts die ja auch o.O

    Wie gesagt: Probier einfach mal selbst eine Displaylist gegen ein VBO. Du wirst nie ein VBO haben, was schneller ist als eine Displaylist.
    Ich sags nochmal, du schickst mehr Daten über den Bus! Das ist einfach so.
    Mehrere Calls im C-Code hast du ohnehin (ob das nun binding vom VBO ist, den DrawCall, unbinding, usw.)


Anmelden zum Antworten