Ich versuche im Moment Pixeldaten so schnell wie möglich zu zeichnen und hab mir gedacht, dass da Display Lists ganz nützlich wären, da so die Daten im Grafikkartenspeicher gespeichert werden und es so zu schnelleren Zugriffszeiten kommt.
Ich habe jetzt zwei Testprogrogramme die beide ein gleich großes Bild zeichnen, das eine Programm arbeitet mit Display List und das andere im immediate-mode, allerdings unterscheiden beide sich überhaupt nicht in der Geschwindigkeit und das egal bei welcher Größe.
Hier mal die wichtigsten Codebestandteile (beides mit Glut):
Ich frage mich was hier im Hintergrund passiert, dass beides gleich schnell läuft. Ich hatte mir gedacht dass vielleicht blos das Kommando "glDrawPixels(checkImageWidth, checkImageHeight, GL_RGB, GL_UNSIGNED_BYTE, checkImage);" gespeichert wird, und nicht etwa die Pixeldaten. Das kann aber nicht sein, da ich in einem Test, zwischen jeden zeichnen "checkImage" verändert habe, sich aber nichts verändert hat.
Dann hatte ich mir gedacht, dass ich ein zu kleines Bild nehme, und sich somit die Übertragungsraten nicht unterscheiden, also habe ich ein sehr großes Bild genommen(4400*4400). Aber wieder haben sich keine Unterschiede zwischen der Darstellungsgeschwindigkeit ergeben.
Liege ich hier total falsch wenn ich für Pixeldaten eine Display List verwende?
Ich habe übrigens das Redbook, im Notfall könnt ihr mich also einfach auf das richtige Kapitel hinweisen.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Displaylisten können nicht irgendwelche Daten auf der Grafikkarte ablegen. Wenn dann sind immer Vertexdaten gemeint die dann auf der Karte abgelegt werden können. Also TexCoords, Color, Vertex, Normal. Alles das was mit VBOs auch möglich ist, da intern auch VBOs benutzt werden. Können aber auch nur deswegen weil die Displayliste nicht gezwungen werden kann dies zu tun. Wenn die Grafikkarte das zum Beispiel nicht unterstützt dann behält die DisplayListe die Daten in einem eigenen Puffer und benutzt diesen anstelle des Grafikspeichers. Ab Geforce 1 oder 2 (weiß nicht genau) braucht man sich aber keine Sorgen mehr zu machen.
In deinem Fall hast du aber Pixeldaten. So wie du das vor hast können die nicht auf der Karte abgelegt werden. Das Einzige was du machen kannst sind Texturen. Allerdings solltest du die Texturen außerhalb der DisplayList erstellen und nur per DisplayListe zeichnen. Da Texturen aber nicht beliebig groß werden können musst du diese zerteilen (512x512) und dann entsprechend mehr Quads zeichnen. Allerdings da du nur ein Quad pro Textur zeichnen würdest wäre der wirkliche Vorteil der DisplayListe/VBO wohl eher auch nur gering. Diese Techniken sind darauf ausgelegt, dass du mehr Flächen an einem Stück zeichnest. Nichts desto trotz können einige Grafikkarte selbst durch solche simplen DisplayListen ein bisschen was optimieren. Es fallen ja alleine schon die Aufrufe der OpenGL Methoden bzw mögliche Berechnungen weg. Aber diese Veränderungen sind eher nur gering.
Die Funktion glDrawPixels solltest du aber nach Möglichkeit nicht benutzen. Sie existiert zwar und funktioniert auch aber die Grafikkarten sind für etwas anderes ausgelegt. Und zwar Flächen mit Texturen. Deswegen wird nicht darauf geachtet wie schnell diese Methode ist und da du mehr oder weniger direkt den Framebuffer manipulierst ist das doch eher mit Vorsicht zu genießen. Mit anderen Worten es wird nie wirklich schnell werden. Zu mindest ist Vergleich zu Texturen.
Sollte ich es so gesehen auch vermeiden für Textanzeige glBitmap zu verwenden?
Ich dachte bis jetzt, dass es schneller geht wenn man ein fertiges Pixelarray bloß in den Framebuffer schiebt, weil da die ganzen Zwischenschritte nicht mehr gemacht werden müssen. Bei Polygonen müssen die Texturen ja erst noch richtig gemappt werden, usw. .
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Also ich denke, dass glBitmap ist im Vergleich zu texturierten Quads langsamer sein wird. Bzw wird es da wohl darauf ankommen wie viel man zeichnet. Also wie groß das ist was man zeichnet und wie häufig man eine Textur wechseln muss. Genau sagen kann ich es dir nicht, weil man das mal auf allen möglichen Hardwaren ausprobieren müsste. Aber die Karten sind halt eher für Texturen/Polygone optimiert. Das heißt nicht, dass die Pixelfunktionen langsam sind sondern halt nur, dass die Industrie da nicht die Priorität drauf legt.
Das was man mit glBitmap normal zeichnet ist verhältnissmäßig klein und der Aufwand um eine solches Font zu erstellen ist ja ziemlich gering. Also das halte ich für vollkommen unkritisch.
Wobei du auch generell abschätzen musst was du genau haben willst. Also für welche Hardware schreibst du es und wie wichtig ist es das letzte bisschen Geschwindigkeit herraus zu holen. Wenn du der Meinung bist, dass es ausreicht, dann reicht es. Ich hoffe du weißt worauf ich hinaus will.
Aber wie gesagt von glDrawPixels raten ich generell ab. Es muss ja auch jedes Pixel an das Format des Framebuffers angepasst werden.
Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.