Schnellste Methode um wenige Pixel in einer Textur zu verändern?



  • Hallo!

    Ich habe hier eine kleine Frage zur schnellsten Methode um in einer OpenGL Textur einen oder mehrere Pixel zwischen jedem Rendervorgang zu verändern. Es geht wirklich nur um einzelne RGB Pixelwerte. sonst nichts.

    Die Texturen würden an sich auch nicht sehr groß sein, dennoch hoffe ich, dass es etwas schnelleres gibt, als das Bild mit den Veränderungen jedesmal wieder in eine OpenGL Textur zu verwandeln.

    Ich habe auch schon an einen VBO gedacht, aber dass wird warschenlich auch recht teuer für einige wenige Pixel.

    Wie würde es z.B. mit dem direkten verändern der OpenGL textur aussehen? Also wenn ich die Textur im AGP-Speicher lege und mich dann daran zu schaffen mache? Sind die dortigen Werte je nach Treiber und Grafikkarte ganz anders aufgebaut?

    Ich werde mich mal an einige Performance Tests machen, da ich vermute dass es eventuell keine Perfekte Methode dafür gibt.



  • Dafuer hat auch OpenGL Shader. An den "AGP-Speicher" wirst du wohl nicht herankommen.



  • Ich denke glTexSubImage2D() ist was du suchst. Generell würd mich aber interessieren was genau du damit vorhast. Auch wenn du nur wenige Daten änderst zwingst du dadurch die CPU und GPU zur Synchronisation was unter Umständen merkbare Auswirkungen auf die Performance hat. Evtl. kann man was du willst auch auf anderem Weg effizienter erreichen...



  • Ich arbeite gerade wieder an meinem kleinen Logiksimulator Projekt. (http://sourceforge.net/projects/icaf/)

    Als Anzeigebauteil möchte ich unter anderem Pixel Displays einbauen.
    Diese werden dann mittels Adressleitungen und Datenleiungen angespeochen.
    Es würden im normalen modus quasi max. einen Pixel pro schaltvorgang verändert werden.
    (Ich werde auch einen "Performance" Modus haben, in dem nicht alle Schaltvorgänge und Pixelängerung angezeigt werden.)

    Normalerweise sollten die Displays aber auch keine extremen Größen haben.

    Ich bin erst gestern auf OpenGL umgestiegen, da der normale 2d-Grafik von wxWidget nicht die genünschte geschwindigkeit hatte. Es benutzt wohl nur die älteren GDI Funktionen unter Window. Was recht schnell einen Flaschenhals darstellt.
    D.h. Ich benutze OpenGL hier nur für einfachst 2D Darstellung. Und habe jetzt noch den Vorteil das Zoom einfacher zu realisieren ist.




Anmelden zum Antworten