GlSl only GUI



  • Hallo,

    nachdem ich jetzt wieder ein wenig in Richtung OpenGL und Shading unternommen habe, wollte ich nun versuchen eine GUI zu bauen. Da ich jetzt schon einige Ansätze gesehen habe, die aber wiederum auf Buffer und ähnlichem basieren, würde ich gern wissen, ob und wie man beispielsweise ersteinmal einen Text-Shader mit TextureFont realisieren könnte ohne jetzt der Einfacheit halber im Imediatemode auch nur ein einziges Quad zeichnen zu müssen.

    Wenn man soetwas überhaupt realisieren kann, welche Daten benötigt der Shader um beispielsweise eine kurze "Hello World" Anwendung zu machen. Vorverarbeitung der CPU sind kein Thema, jedoch sollte auf extra Vertexdaten verzichtet werden können.

    Hat da irgendjemand eine Idee, nach Möglichkeit abwärtskompatibel.
    Danke!


  • Mod

    was spricht dagegen einen vbo zu haben mit den UVs und positionsdaten pro buchstabe?



  • zu unperformant und auch nicht mehr Zeitgemäß



  • Naja, das einzelne Verarbeiten jedes Zeichens, sei es nun mit Index, hat mich für einen String von 20 zeichen und etwa 2 zeilen trotzdem sehr viel Zeit gekostet, zu viel um genau zu sein und von daher trau ich dem Braten nicht mehr.

    Ich würde daher einen Shader bevorzugen, habe da auch schon ein paar gesehen, die auch die Textfragmente innerhalb dessen zusammengefügt haben, aber leider nicht wie diese aufgebaut sind.

    Die Quads könnte ich ja im GeometryShader erzeugen aus TopLeft und BottomRight, ich habe aber beim Suchen im Netz auch schon Beispiele gesehen, die angeblich mit einem einzigen Quad ausgekommen sind.

    So versiert in der Shadertechnik bin ich jetzt auch nicht, vor allem da ich bis vor kurzem nur auf gl2.0 arbeiten konnte.



  • Also ich hab's einfach so gemacht, dass ich einen VBO pro Text habe. Heißt, ich erstelle einen Text, der berechnet dann einmal die Texturkoordinaten, und den kann man dann überall auf dem Bildschirm zeichnen. Das sollte auch relativ effizient sein, da man ja normalerweise nicht ohne Ende lange Texte hat die sich dauernd verändern.



  • Um deinen Shader verwenden zu können, wirst du irgendwas zeichnen müssen. Um was zeichnen zu können, wirst du Geometrie brauchen. Um die Geometrie konstruieren zu können, wirst du wissen müssen, wo der Text sein soll. Zumindest diese Daten müssen irgendwo herkommen. Inwiefern sind VBO "zu unperformant"? Was schlägst du für Alternativen vor!?



  • Das ich was zeichnen müsste weiß ich, allerdings reichen da auch 2 Punkte die jeweils die TopLeft und die BottomRight edge definieren, dann weiß ich ja wo und wie groß der "Träger" ist


  • Mod

    kudono schrieb:

    zu unperformant und auch nicht mehr Zeitgemäß

    und dennoch gibt es nicht schnellereres.


  • Mod

    Pria schrieb:

    Das ich was zeichnen müsste weiß ich, allerdings reichen da auch 2 Punkte die jeweils die TopLeft und die BottomRight edge definieren, dann weiß ich ja wo und wie groß der "Träger" ist

    und willst du dann noch extra einen langsamme geometry shader stage anwerfen um dir das schreiben von 16byte zu sparen? oder womoeglich instanzing um quads zu zeichnen?

    schreiben von paar bytes pro char wird da nicht langsammer sein.



  • Pria schrieb:

    Das ich was zeichnen müsste weiß ich, allerdings reichen da auch 2 Punkte die jeweils die TopLeft und die BottomRight edge definieren, dann weiß ich ja wo und wie groß der "Träger" ist

    Und wie kommen diese zwei Punkte zur GPU?



  • Also wenns statischer Text ist, render den auf eine Textur mit mehreren Quads, dann platzier die Textur aufm Bildschirm. Dann kommst auch mit einem Quad aus.

    Hier is noch nen Artikel:
    http://stackoverflow.com/questions/5262951/what-is-state-of-the-art-for-text-rendering-in-opengl-as-of-version-4-1



  • so um den thread nochmal anzuwerfen *campingkocher anwerf*, die idee war dass man eventuell auch per shader dann aus diesem heraus debug-output machen könnte, man hat ja dann schon geometry und die erzeugung von text wäre ja ebenfalls im shader.

    Aber jetzt mal butter bei de fische, was ist aktuell der stand der dinge?
    Ist die beste lösung nach wie vor einen puffer ala vbo zu verwenden, wie ist die pefomance und wie sieht es aus wenn man beispielsweise eine gui mit text erzeugen möchte?

    ich möchte dazu bitte keine 3rd party libs benutze müssen



  • Pria schrieb:

    [...] die idee war dass man eventuell auch per shader dann aus diesem heraus debug-output machen könnte, man hat ja dann schon geometry und die erzeugung von text wäre ja ebenfalls im shader.

    Wie genau stellst du dir das vor?

    Pria schrieb:

    Ist die beste lösung nach wie vor einen puffer ala vbo zu verwenden, wie ist die pefomance und wie sieht es aus wenn man beispielsweise eine gui mit text erzeugen möchte?

    Mir ist keine moderne Lösung bekannt, die ohne VBOs auskommen würde. Gut, man könnte natürlich Texturen oder Uniform Buffer oder was auch immer verwenden, aber am Ende läufts aufs gleiche raus...


Anmelden zum Antworten