PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Software-Rendering in Spielen - welche Grafikschnittstelle?


Arokh
2006-09-11, 20:37:47
Die Frage kam mir, nachdem auf meiner frisch erworbenen GF 7600GT einige ältere Spiele, u.a. NFS III und Tropico, nur noch im Software-Modus vernünftig laufen: welche Grafikschnittstelle wird beim Software-Rendering eigentlich benutzt? Die Windows-GDI sollte es nicht sein, oder? Die sollte dafür ein bißchen langsam sein. Vielleicht DirectDraw? Oder noch was anderes?

Der Unterschied zum 3D-Hardwarerendering ist ja - soweit ich das sehe - der, daß man bei letzterem Eckpunkte von Polygonen sowie Texturdaten usw. an die Grafik-API übergibt, die dann alles weitere erledigt (so jedenfalls bei OpenGL, ich nehme an bei Direct3D wird es ähnlich sein), während man sich beim Software-Rendering um Dinge wie Koordinatentransformation und Rendern des Polygons selbst kümmern muß, die Grafik-API also erst in einem viel späteren Stadium des Rendering-Vorganges in Aktion tritt.
Falls ich jetzt Blödsinn erzählt habe, bitte hauen ;)

Gast
2006-09-11, 20:57:23
Die Frage kam mir, nachdem auf meiner frisch erworbenen GF 7600GT einige ältere Spiele, u.a. NFS III und Tropico, nur noch im Software-Modus vernünftig laufen: welche Grafikschnittstelle wird beim Software-Rendering eigentlich benutzt? Die Windows-GDI sollte es nicht sein, oder? Die sollte dafür ein bißchen langsam sein. Vielleicht DirectDraw? Oder noch was anderes?



meines wissens werden für das softwarerendering eigene renderer verwendet, also weder D3D noch OGL.


Der Unterschied zum 3D-Hardwarerendering ist ja - soweit ich das sehe - der, daß man bei letzterem Eckpunkte von Polygonen sowie Texturdaten usw. an die Grafik-API übergibt, die dann alles weitere erledigt (so jedenfalls bei OpenGL, ich nehme an bei Direct3D wird es ähnlich sein), während man sich beim Software-Rendering um Dinge wie Koordinatentransformation und Rendern des Polygons selbst kümmern muß, die Grafik-API also erst in einem viel späteren Stadium des Rendering-Vorganges in Aktion tritt.
Falls ich jetzt Blödsinn erzählt habe, bitte hauen ;)

beim softwarerenderer muss man normalerweise ALLES selbst machen, eine grafik-API gibt es (in der regel) nicht.

RoKo
2006-09-11, 21:19:10
beim softwarerenderer muss man normalerweise ALLES selbst machen, eine grafik-API gibt es (in der regel) nicht.
Natürlich gibt es die, irgendwie müssen die Pixel schließlich auf den Schirm. DirectDraw wird man da wohl verwendet haben.

Gast
2006-09-11, 21:27:17
Natürlich gibt es die, irgendwie müssen die Pixel schließlich auf den Schirm. DirectDraw wird man da wohl verwendet haben.

für die darstellung am bildschirm natürlich, da werden die entsprechenden OS-funktionen benutzt, für die eigentliche berechnung gibt es (bis auf eventuelle OGL/D3D-softwarerenderer) nicht wirklich eine API, sondern die anwendung alles selbst machen muss.

softwarerenderer gab es schon lange vor directX&co.

Arokh
2006-09-11, 22:12:38
für die darstellung am bildschirm natürlich, da werden die entsprechenden OS-funktionen benutzt, genau davon sprach ich. Handelt es sich dabei um Funktionen von APIs wie der GDI oder DirectDraw, oder ist das noch ne Schicht tiefer?
Früher, unter DOS, hat man noch direkt die Grafikhardware angesprochen, unter Windows sollte das ja eigentlich nicht mehr so sein.

Ich selbst habe z.B. mal ein Starfield Simulation Programm (ähnlich dem Screensaver) geschrieben. Dabei habe ich zunächst für jeden Stern die 3D-Koordinaten berechnet, dann in 2D-Bilschirmkoordinaten transformiert (dabei jeden Stern als Punkt behandelt, nicht als Polygon), für jeden Stern den scheinbaren Durchmesser berechnet (aus dem tatsächlichen Durchmesser und der z-Koordinate), und dann für jeden Stern einen ausgefüllten Kreis gezeichnet, mit den 2D-Koordinaten als Mittelpunkt und dem scheinbaren Durchmesser als Kreisdurchmesser. Zum Zeichnen des ausgefüllten Kreises habe ich eine Funktion der GDI benutzt (TCanvas.Ellipse in Delphi).

Das Programm habe ich dann später mal auf OpenGL portiert, wobei alles auf die Berechnung der 3D-Koordinaten folgende wegfiel, da intern von OpenGL erledigt.

RoKo
2006-09-11, 22:53:21
genau davon sprach ich. Handelt es sich dabei um Funktionen von APIs wie der GDI oder DirectDraw, oder ist das noch ne Schicht tiefer?
DirectDraw wie gesagt. Das ist genau dafür da eine fertige Grafik schnell auf den Bildschirm zu bringen.

Spasstiger
2006-09-11, 23:01:15
Im Fall von NFS III kannst du ja mal einen Glide-Wrapper testen.

Gast
2006-09-11, 23:24:04
genau davon sprach ich. Handelt es sich dabei um Funktionen von APIs wie der GDI oder DirectDraw, oder ist das noch ne Schicht tiefer?

DirectDraw erlaubt direkten Zugriff auf das VRAM per Locks - niedriger gehts nicht in einem Protected-Mode-OS.