Autor Thema: Design eines Grafiktreiberinterface  (Gelesen 3775 mal)

ChristianF

  • Beiträge: 296
    • Profil anzeigen
    • DeutschOS - Betriebssystem Projekt
Gespeichert
« am: 17. October 2008, 08:32 »
Moin,
ich werde einen Grafiktreiber unter verwendung des CDI schreiben.
 
Da ich allerdings schon so weit bin und mich mit dem Interface Design eines Grafiktreibers beschäftige, habe ich eine kleine Frage.
Ich habe bisher folgende Liste an Aufgaben eines 2D Grafiktreibers ersonnen:
  • Gewünschte Auflösung setzen (falls möglich)
  • Hardwarebeschleunigtes Zeichnen von Linien, Kreise, Vierecke, Dreiecke, Bitmaps (BitBlt) und füllen festgelegten Bereichen (FloodFill)
  • Hardwarebeschleunigt Text auf den Bildschirm schreiben. (könnte man eventuell zu dem oberen Punkt hinzunehmen)
Fehlt da eurer Meinung nach etwas?
 
Gruß Christian

Termite

  • Beiträge: 239
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 17. October 2008, 09:17 »
Was fällt mir noch ein, was man alles an einer graka einstellen kann.

Bildwiederholfrequenz?

Syncmechanismuss für den Katodenstrall rücklauf ( oder wie auch immer das ding heist, wichtig wenn jemand animationen ohne ruckeln zeichnen will )

Verwalten von mehreren virtuellen Monitoren im Graka speicher ( aktuelles bild wird dargestellt, gezeichnet wird im nicht sichtbaren, danach wird umgeschaltet, verhindert hässliches flimmern )


ChristianF

  • Beiträge: 296
    • Profil anzeigen
    • DeutschOS - Betriebssystem Projekt
Gespeichert
« Antwort #2 am: 17. October 2008, 10:17 »
Verwalten von mehreren virtuellen Monitoren im Graka speicher ( aktuelles bild wird dargestellt, gezeichnet wird im nicht sichtbaren, danach wird umgeschaltet, verhindert hässliches flimmern )
Du meinst ich soll den Modus zum umschalten beim Double oder Tripple Buffering in den Treiber reinnehmen?
Ich würde meinen, das sollte die Anwendung machen, da der Buffer zu oft umgeschaltet wird. Jedes mal für das Weiterschalten zum nächsten Buffer einen IPC Request zu senden würde das ganze doch ziemlich runterziehen oder?
Es kann auch sein, dass das nicht so ist... Ich müsste mich mal wieder ein bissel in die 2D Spieleprogrammierung einarbeiten, aber soweit ich mich erinnern kann wird auch unter Windows der Flip von der Library vorgenommen.
 
 
Bildwiederholfrequenz?
Das muss auch noch in den Treiber rein.
 
 
Syncmechanismuss für den Katodenstrall rücklauf ( oder wie auch immer das ding heist, wichtig wenn jemand animationen ohne ruckeln zeichnen will )
Da werde ich mich wohl noch weiter einlesen müssen.
Meinst du die Vertikale Synchronisation (vsync)?
« Letzte Änderung: 17. October 2008, 10:45 von ChristianF »

Termite

  • Beiträge: 239
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 17. October 2008, 11:27 »
Jo ich hab den vertical sync gemeint, das hängt aber auch mit dem buffering zusammen.

also wenn buffering nicht bestandteil des treibers ist, dann hat der Programmierer das selber zu machen (ob ich nun eine lib verwende oder nicht). was wiederum bedeutet direkter HW zugriff, ggf. sogar kentniss der entsprechenden HW da ggf. anders gelöst. Wobie Animationen sicher nicht der masstab sein sollten.

ich vorstelle mir das so vor, du kanst den kreis auf dem aktuellen sichtbaren Monitor puffer zeichnen (der treiber schaut dann, das das ggf nicht flimmert), oder auf einem nicht sichtbaren. auf den nicht sichtbaren, kannst du auch mehre elemente nach einander zeichnen lassen, ohne das es zu hässlichen flimmern kommt. (z.B. fenster aufbau) erst wenn alles fertig ist sagst man dann per software dann das er austauschen soll.

oder was ggf auch noch sinn voll ist, eine virtulle monitorauflösung die grösser als die sichtbare ist. nur doch positionierung von x und y kannst du dann auf dem virtuellen Monitor scrollen.

Ich weis auch nicht was alles unter 2D beschleunigung sich alles verbirt. z.B. könnte ich mir vorstellen, das ich teilbereiche eines bildes im speicher durch die gegend kopieren kann. z.B. Hintergrund, aktuelles Fenster, und durch die gegend ziehen.

aber das ist auch der grund wiso unter windows z.B. grafikkarten treiber eine gewisse sonderstellung haben. sie dürfen z.B. direkt auf die hw zugreifen, da der normale weg einfach zu langsam ist. siehe dazu win NT4 zu win2000 und nachfolgend.


ChristianF

  • Beiträge: 296
    • Profil anzeigen
    • DeutschOS - Betriebssystem Projekt
Gespeichert
« Antwort #4 am: 17. October 2008, 12:31 »
Also laut einer Seite der UNI Stuttgart (http://wb.rus.uni-stuttgart.de/pc/grafik.asp) ist die Windows 2D Beschleunigung folgendes (was sich auch gut übertragen lässt):
Zitat
Ältere Karten setzten Chips ohne eigene „Intelligenz“ ein - für das Setzen und Löschen von Bildpunkten war die CPU verantwortlich. Im Laufe der Zeit haben sich die Grafikchips zu Koprozessoren entwickelt, die der CPU Arbeit abnehmen: Sie sind grundsätzlich mit Fähigkeiten zur Grafik-Beschleunigung ausgelegt, das heißt, sie bieten Funktionen zum besonders schnellen Füllen, Aufbauen und Verschieben von Bildschirmteilen (Fenstern).

Was dem entspricht, was ich mir gedacht habe.
Der Treiber kann mit der Hardwarebeschleunigung Dreicke, Vierecke, Kreise,... auf den Bildschirm zeichnen.
Sollen komplexe Bitmaps dargestellt werden, so malt das Programm diese, in den Backbuffer und ordnet einen Tausch des Front- und Backbuffers an. Und schon ist das Problem mit dem Flackern, was du denke ich mal gemeint hast, behoben.
 
EDIT
Ein Tausch der Buffer würde dann so aussehen, wenn das Programm dem Treiber sagt, ich bin fertig mit dem Schreiben der Daten in den Backbuffer, lässt dieser den Tausch zu.
Vorrausgesetzt, der Artikel bei Wikipedia (http://de.wikipedia.org/wiki/Double_Buffering) stimmt.
« Letzte Änderung: 17. October 2008, 13:21 von ChristianF »

Termite

  • Beiträge: 239
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 17. October 2008, 14:22 »
Hmmm

ich könnte mir vorstellen, das mit dem schnellen kopieren im grafikspeicher sich folgendes realisieren lässt.

für jedes Fenster existiert ein quasi eigener Monitor abklatsch im Grafik speicher. (nur so gross wie das Fenster selber) zum aufbauen des Monitorbildes werden nor noch die entsprechenden Ausschnitte auf den sichbaren Monitorbereich kopiert. Natürlich in der richtigen reihenfolge.

kann man sogar noch weiter treiben, das wenn z.B. ein scrollfenster für z.B. ein bild gebraucht wird, das ganze bild schon im speicher liegt, aber nur der sichtbare bereich in den darstellungsramen kopiert wird. wird gescrollt, wird einfach nur der neue auschnitt reinkopiert.

 

Einloggen