GUI - Ansatz
Übersicht

![]() |
N0XBetreff: GUI - Ansatz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo liebe Community,
ich möchte ein GUI programmieren, welches folgende Features unterstützt: -> hauptsächlich InGame -> feste Fenstergrößen -> Buttons, Textareas, Scrollbars -> verschiebbar Ich habe bisher versucht mit WritePixel in eine Pixmap zu schreiben und auch relativ gute Ergebnisse bekommen, allerdings habe ich gelesen, dass dies ineffizient sei besonders wenn es um Echtzeit-Manipulation geht. Andere mir bekannte Ansätze wären die Fenster auf Quads zu zeichnen und diese vor der Camera zu positionieren oder mit Render2Texture zu arbeiten - wobei ich mir noch nicht ganz erschließen konnte wie das funktioniert. Was für Ansätze gibt es noch, die zu meinen Bedingungen funktionieren könnten und vor allem Performance-technisch sinnvoll nutzbar sind? MfG, N0X |
||
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5% |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ist die GUI denn in sich im wesentlichen statisch?
Dann wäre meines erachtens nach der beste Weg die Gui-Elemente aus vorgegebenen Versatzstücken in ein Bild zu rendern (Schau Dir mal TPixmap in der Hilfe genauer an) und dieses immer wieder zu zeichnen. Ansonsten besteht halt die Möglichkeit deine Gui mit standart-Images zu realisieren und immer wieder zu ende einzuzeichnen, so dass sie on-Top liegen. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
N0X |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also skalierbar sollen die Fenster nicht sein, beim Erstellen werden sie auf eine Größe festgelegt, die sich nicht mehr ändert.
Positionierbar sollen sie schon sein. Nach deinem Ansatz bin ich auch schon vorgegangen, aber gibt es nicht Probleme wenn ich z.B. Textareas (die sich ja ständig ändern wenn man tippt) auf Fenster male? Oder sich ändernder Text angezeigt wird? Oder sollte ich Diese dann als eigene Images darüber zeichnen? MfG, N0X |
||
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5% |
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du könntest die statischen Teile (z.B. das Fenster selbst) in ein Bild rendern, und den Text danach drüber zeichnen. Das sollte ganz gut gehen.
Wenn du Bilder zeichnest, dann sollte BMax automatisch das Ganze auf Quads zeichnen. Das ist insofern schneller, da die CPU somit der Grafikkarte nur ein Bild und die Position gibt, und die den Rest machen kann. Mit WritePixel muss die CPU jedes Pixel einzeln zeichnen, was deutlich langsamer ist. |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zu den Textareas: In der Regel wird ein User selten mehr als ein Zeichen pro Frame hinzufügen oder entfernen, daher wäre ein denkbarer Ansatz folgender:
Der Text deiner Area wird zeilenweise gespeichert. Alle Zeilen werden mit einem Flag versehen, welches Veränderung kennzeichnet. Wird eine Zeile verändert, wird der Text einmalig in ein Image gerendert, welches dann eingezeichnet wird. Da man seltenst mehr als eine Zeile gleichzeitig bearbeitet wird also ab von der aktuellen Zeile idR alles aus einem Image eingerendert, und das geht sehr flott. Einzige Ausnahme wäre in der Tat ein Verändern der Areagröße, weil hier ja der komplette Text neu umgebrochen wird. Aber den Lag der dabei entsteht wird der User in Kauf nehmen können. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
N0X |
![]() Antworten mit Zitat ![]() |
---|---|---|
Okay, super Danke!
Aber um das WritePixel beim Erstellen des jeweiligen Fensters werde ich wohl nicht herumkommen oder? Bis jetzt erstelle ich ein Bild mit der vorgegebenen Größe und zeichne dann mit WritePixel in die Pixmap des erstellten Bilds. Dann wird es per DrawImage ausgegeben. Ich verstehe nicht ganz, ob ich komplett auf WritePixel verzichten sollte (bzw. den Umgang mit Pixmaps), da ich keine Alternative sehe das Fenster aus seinen Bestandteilen zusammen zu setzen. MfG, N0X |
||
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5% |
![]() |
juse4pro |
![]() Antworten mit Zitat ![]() |
---|---|---|
Könntest auch einfach auf dieses ganze WritePixel Gedöns verzichten und das ganze einfach live rendern (http://en.wikipedia.org/wiki/I..._graphics)). So hab ich das bisher auch immer gemacht. | ||
![]() |
Thunder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was auch möglich ist: Zuerst mal mithilfe von DrawRect etc. in den Backbuffer zeichnen. Dann mit GrabImage ein Image davon machen und wieder löschen. Wenn man vor dem nächsten Flip alles überschreibt (oder Cls macht), sieht auch keiner was davon. So ein Grab dauert aber eventuell zu lange... | ||
![]() |
juse4pro |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was auch möglich wäre: Per Frame-Buffer-Object auf eine leere Textur schreiben. Da hast du quasi die Möglichkeit auch direkt per DrawText und co auf die Textur zu "malen".
Das alles auf Seite der Grafikarte. Also kein re-Upload notwendig. Theoretisch sogar realtime-tauglich. ![]() |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ein Beispiel in BMax für FBO würde mich sehr interessieren ![]() |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group