Ich hoffe, du kanst Englisch
Die Dokumentation des I/O-Managers:
http://msdn.microsoft.com/en-us/library/ff565734(v=vs.85).aspx
http://en.wikipedia.org/wiki/Windows_Driver_Model <- heutiges Treibermodell
http://en.wikipedia.org/wiki/VxD <- Treibermodell von Win 3.x und 9x
Und warum gibst du eigentlich die Demoszene als Beispiel?
Die Demoszene hat ihren Ursprung beim C64, Amiga und Atari. Erst so um 1993 (Mit der Einführung von OpenGL) wurde die Demoszene auf den PC aufmerksam.
Beim C64/Amiga gabs keine Treiber in Softwareform. Wozu auch? Es gibt ja nicht einmal unterschiedliche Hardware. Es gab beim C64 nur zwei Befehle, mit denen man auf die Hardware zugreifen konnte: peek und poke.
Ein Befehl löste Systemroutinen aus: sys
Da es zu dieser Zeit keine großen Schutzmechanismen gab, konnte man mit Assembler direkt auf die Register zugreifen.
Beim Amiga sah das ähnlich aus.
DonnyDepp schrieb:
abstraktes "fassbares" beispiel:
virtuelle maschinen. sind die treiber in der virtuellen maschine keine treiber?
sie sind schließlich nicht im "io-manager" (meinst wahrscheinlich kernel) des host-systems.
Was ist das für ein bescheuertes Beispiel?
Dieses Beispiel passt nicht mal ansatzweise.
Eine VM ist eine Sandbox.
Aber warscheinlich weißt du auch nicht mal, was eine Sandbox ist.
Oh mann ...
Das wird ja immer dümmer.
Virtuelle Treiber müssen sich auch im I/O-Manager anmelden.
Schon mal VirtualBox installierst? Den virtuellen Treiber für die Netzwerkschnittstelle findest du im Geräte-Manager des Host-Systems ...
Und nur zur Info: Windows hat nen Hybrid-Kern ...
dh. man kann mit assembler oder c direkt auf die register zugreifen, die von der hardwareabstraktionsschicht gemapt werden.
Vom virtuellen Adressraum hast du anscheinend auch noch nichts gehört.
Dann versuch mal mit C den Speicher einer anderen Anwendung auszulesen. Viel spaß.
edit:
weißt du, warum es "virtueller Treiber" heißt?
Weil diese Software eine Hardware emuliert.
z.B. ein virtueller Treiber für eine Ethernet-Schnittstelle:
Jede Ethernet-Schnittstelle kann mit der virtuellen Schnittstelle auf normale Art kommunizieren.
Es geht also nicht darum, dass hier ein Treiber installiert wird, der mit einer echten Hardware kommuniziert, sondern in erster Linie um eine Software, die wie eine Hardware angesprochen werden kann.
Also der umgekehrte Weg.
edit2: Ich denke, du wirst das wohl sowieso nicht mehr lesen, aber:
DonnyDepp schrieb:
n kumpel hat mal ne eigene rendering-engine geschrieben. dh. per hand die einzelnen register befüllt und damit punkte aufm bildschirm erzeugt.
linien, ebenen, translationen etc. müssen da auch per "hand" berechnet werden.
er hat nicht die 3d-register der grafikkarten benutzt, sondern nur die standardregister, die auch benutzt werden, damit man nach dem einschalten etwas sieht... und zwar egal, welche grafikkarte nun um rechner steckt.
oder habt ihr schonmal ein mainboard gekauft, das nur mit einer speziellen grafikkarte läuft?
Was für ein Bullshit.
Es gibt keine 3D-Register. Im Framebuffer liegen 2D Grafiken.
Das einzige, wo permanent die selben 3D Werte gespeichert werden, sind die Displaylisten.
Weißt du, in der Grafikkarte werden 3D Informationen in 2D umgewandelt, damit ein Bildschirm die Bilder überhaupt anzeigen kann. Um dies zu bewerkstelligen, laufen die 3D Daten durch zig Stationen, die in der Grafikkarte implementiert sind.
Die Stationen sind:
Geometry ->
Rasterizer ->
Framebuffer
Im Detail:
ModelView Transformation -> Lighting -> Perspective Transformation -> Primitive Assembly -> Clipping -> Perspective Division -> Window-to-Viewport Transformation ->
Scan Conversation -> Fragment Processing -> Per Fragment Operations -> Framebuffer Operations -> Framebuffer
Bei der Detailierten Auflistung erkennst du vielleicht auch, dass man da einfach nicht ein paar Schalter umlegen kann, damit ein Bild, was aus 3D Informationen besteht, auf dem Bildschirm angezeigt wird.
Aber wahrscheinlich redest du vom Raytracing. Eine Art, wie 3D Informationen in 2D umgewandelt werden können. Diese Art kann aber nicht in die Hardware implementiert werden, da dieses Verfahren recht komplex ist. Deswegen wird sie per Software implementiert. Bis jetzt konnte noch kein Echtzeit Raytracer entwickelt werden. Erzeugt aber ein realeres Bild und wird deswegen überwiegend bei Animationsfilmen verwendet.
Und hier sehe ich nun den Zusammenhang, mit dem Beispiel der Demoszene, da Gruppen öfters mal einen Raytracer basteln.
Dafür programmiert man sich aber nicht einen Treiber, sondern benutzt Schnittstellen, wie z.B. OpenGL oder DirectDraw/3D.