Liesmich zum Glide3-zu-OpenGL-Wrapper Version 1.3b (c) 2004 by Sven Labusch

Aufbau:
1. Vorwort
2. "Lieferumfang"
3. Anforderungen
4. Installation
5. Dateibeschreibungen
6. Hinweise/technische Aspekte
7. Versions-Änderungen
8. Sonstiges


                              1. Vorwort


Erstmal hallo allerseits!
um es kurz zu fassen: mich hat die Leistung, die Diablo2 unter Direct3D an den Tag legt genervt. 
Da Diablo2 mit der Glide-Schnittstelle eine bessere Figur macht, war es für mich naheliegend, irgendwie zu versuchen, dass das Spiel auch auf meinem Rechner mit Glide laufen kann. Dabei gab es zwei Probleme:
1. Glide-Treiber gibt es nur für Voodoo-Karten. Diablo2 braucht Voodoo-Karten ab dem Typ Voodoo-Rush, dummerweise hat mein Rechner aber 'ne Geforce2MX.
2. Glide-Wrapper gibt es viele, aber leider habe ich keinen finden können der für mich zufriedenstellend mit Diablo2 läuft.
Nachdem auch der Patch 1.10 keine Besserung mit sich brachte, beschloss ich mich selbst daran zu setzen. Das Ergebnis ist dieser Wrapper, bei dem ich nochmal extra betonen möchte:
Dieser Glide-Wrapper ist explizit für das Spiel Diablo2 programmiert, es ist davon auszugehen, dass er mit anderen Programmen NICHT läuft, oder zumindest keine korrekte Anzeige liefert.

Nachtrag:
Dies ist die Version 1.3b von dem Wrapper. 
Und ein Dankeschön an "Shabazza", "Luzi", "mindphlux", "UnserenToten", "ChaosEnergy", "acesulfam" und dem staff aus dem inDiablo.de-Forum, welche mir geholfen haben.


                              2. "Lieferumfang"


4 Dateien:

liesmich.txt        15549 Byte
readme.txt          12692 Byte
glide3x.dll         87552 Byte
gl32oglinit.exe     78336 Byte



                              3. Anforderungen


Benötigt: 
- OpenGL-konforme Grafikkarte
- ansonsten gleiche Anforderungen wie das Spiel selbst
Empfohlen:
- OpenGL1.3-konforme Grafikkarte
- Grafikkarte ab dem Kaliber einer Geforce256 mit 32MB Grafikspeicher
- mind. 256MB Hauptspeicher


                              4. Installation


Es gibt 2 Möglichkeiten:
1.
Die Datei "glide3x.dll" in das Windows-Systemverzeichnis (z.B. "c:\windows\system") kopieren
2.
Die Datei "glide3x.dll" in das Spiele-Verzeichnis (z.B. "c:\spiele\diablo2") kopieren

Die Datei "gl32oglinit.exe" erstellt eine Datei "gl32ogl.ini", welche in das Spiele-Verzeichnis kopiert werden muss, wenn der Wrapper nicht mit den Standard-Parametern laufen soll.

Da Dieser Wrapper ausschliesslich für Diablo2 programmiert ist, empfehle ich den 2.Weg
Sind die Dateien kopiert, muss im Anschluss noch der Vid-Test von Diablo2 ausgeführt werden.



                              5.Dateibeschreibungen


   liesmich.txt:
Das ist die Datei die sie gerade lesen.

   readme.txt:
Wie die liesmich.txt, nur auf englisch.

   glide3x.dll:
das ist der eigentliche Wrapper
sollte der Wrapper von sich aus einen Fehler bemerken, so wird eine Datei Namens "gl32ogl.err" erstellt, in welcher der Fehler beschrieben wird.

   gl32oglinit.exe:
hiermit können einige Parameter vom Wrapper verändert werden:

Infos anzeigen:
gibt an, ob, und wenn ja, wo im Bild die Status-Informationen angezeigt werden sollen.
Standardeinstellung: keine Anzeige

Reihenfolge:
Mit dem Schalter kann die Reihenfolge geändert werden, in der die Status-Informationen angezeigt werden sollen.

 Framerate:
zeigt an, wieviele Bilder das Spiel pro Sekunde darstellt.
Standardeinstellung: aktiviert(=Häkchen)

 Uhr:
zeigt die Uhrzeit an
Auswahlmöglichkeiten:
 keine
 digitale
 kleine analoge
 große analoge
Standardeinstellung: keine

 Texturmasse:
zeigt an, wieviel an Texturen von dem Wrapper tatsächlich erstellt werden.
Standardeinstellung: deaktiviert(=kein Häkchen)

MB Textur-Speicher:
gibt an, wieviel zur Verfügung stehender Textur-Speicher emuliert werden soll.
Es ist nicht ratsam zuviel zu wählen, da ein Teil dieses Textur-Speichers vom Hauptspeicher abgezweigt werden muss. Wieviel jetzt nun "zuviel" ist hängt ganz vom jeweiligen Rechner und dem darauf installierten Betriebssystem ab. Pi mal Daumen empfehle ich folgende Werte:
bei Rechnern mit:
weniger als 256MB Hauptspeicher: 8MB-16MB  Textur-Speicher
genau 256 MB Hauptspeicher     : 16MB-32MB Textur-Speicher
mehr als 256MB Hauptspeicher   : 32MB Textur-Speicher oder mehr
Es sollte aber auch nicht so viel eingestellt werden, dass der Wrapper mehr Texturen erstellt, als die Grafikkarte selbst an Speicher hat (kann mit dem Schalter "Texturmasse" überprüft werden).
Standardeinstellung: 16MB Textur-Speicher

GL_EXT_paletted_texture:
gibt an, ob der Wrapper 8-Bit-Paletten-Texturen benutzen soll, oder nicht.
Unterstützt die Grafikkarte keine 8-Bit-Paletten-Texturen (oder ist die Einstellung deaktiviert) benutzt der Wrapper statt dessen 16-Bit-Texturen.
16-Bit-Texturen verbrauchen doppelt so viel Speicherplatz wie 8-Bit-Texturen, außerdem müssen die 8-Bit-Texturen von Diablo2 erst in 16-Bit-Texturen umgewandelt werden, was noch eine zusätzliche Belastung für den Rechner verursacht. Es ist daher Ratsam die 8-Bit-Texturen auch zu benutzen, wenn sie unterstützt werden.
Standardeinstellung: aktiviert(=Häkchen)

GL_EXT_shared_texture_palette:
wenn aktiviert und unterstützt, wird eine Palette erstellt, die für alle Texturen gleichzeitig gilt. Ansonsten muss für jede einzelne Textur eine eigene Palette erstellt werden, was Ressourcen frisst.
nur relevant, wenn GL_EXT_paletted_texture aktiviert UND unterstützt.
Standardeinstellung: aktiviert(=Häkchen)

GL_EXT_packed_pixels:
wenn GL_EXT_paletted_texture nicht aktiv oder unterstützt, muss der Wrapper auf 16-Bit-Texturen ausweichen. Mit diesem Schalter kann das Nachladen von ebendiesen Texturen beschleunigt werden.
Standardeinstellung: aktiviert(=Häkchen)

DirectX zum Einrichten:
wenn aktiviert, wird im Fullscreen-Betrieb DirectX anstatt der Win-GDI benutzt, um die Bildschirmauflösung und die Gamma-Einstellung vorzunehmen. Nichts desto trotz wird auch weiterhin OpenGL zum Rendern verwendet.
Standardeinstellung: aktiviert(=Häkchen)

weicher Auflösungswechsel:
wenn aktiviert wird beim Auflösungswechsel nicht mehr vorher in die Standard-Desktop-Auflösung gewechselt. Im Spiel geht dadurch v.A. das Ein- und Ausklinken aus Spielen schneller. 
Andererseits wird beim Wechsel zum Desktop die Auflösung nicht verändert, wenn "DirectX zum Einrichten" deaktiviert ist.
Standardeinstellung: aktiviert(=Häkchen)

feste Gamma-Tabelle:
wenn aktiviert, übernimmt der Wrapper das Einrichten der Gamma-Einstellung. Bei erstmaliger Aktivierung muss aber im Spiel erst noch Gamma und Kontrast manuell eingestellt werden. Der Wrapper erstellt dabei die Datei "gl32ogl.gma", in der diese Einstellung gespeichert wird.
Standardeinstellung: deaktiviert(=kein Häkchen)

Fenstermodus:
wenn aktiviert rendert der Wrapper in ein Fenster und nicht auf den ganzen Bildschirm.
Dieses Fenster hat allerdings keinen Rahmen.
Anstatt die Bildschirmauflösung zu verändern wird die Fenstergröße angepasst. 
Nichtsdestotrotz: ein Klick außerhalb vom Fenster minimiert das Spiel nachwievor.
Standardeinstellung: deaktiviert(=kein Häkchen)

Zentriert:
wenn aktiviert, wird im Fenstermodus das Diablo2-Fenster in der Mitte vom Bildschirm dargestellt, ansonsten links oben in der Ecke. Hierbei tritt in der derzeitigen Diablo2/LOD-Version (v1.10) ein Fehler auf, wenn ein halbseitiges Info-Fenster geöffnet wird (z.B. das Inventar): Der Mauszeiger springt dann an eine falsche Stelle.
Standardeinstellung: deaktiviert(=kein Häkchen)

Maus begrenzen:
wenn aktiviert kann der Mauszeiger das Diablo2-Fenster nicht mehr verlassen.
Für diese Einstellung sollte der Wrapper eigentlich gar nicht zuständig sein, allerdings existiert ein Bug:
bei Mehrschirm-Betrieb kann der Mauszeiger auch im Vollbild-Modus das Diablo2-Fenster verlassen (der Mauszeiger wechselt zum anderen Monitor), was mitunter unangenehm werden kann : ein Klick ausserhalb des Fensters minimiert das Spiel.
Standardeinstellung: deaktiviert(=kein Häkchen)

Deutsch/english:
wechselt die Sprache vom Initialisierungs-Programm.
Standardeinstellung: Deutsch

Speichern:
speichert die gemachten Einstellung in die Datei "gl32ogl.ini". 
Existiert die Datei bereits, wird sie überschrieben, existiert sie noch nicht, wird sie neu erstellt. Benutzt man den Wrapper, ohne dass eine "gl32ogl.ini" existiert, so nimmt der Wrapper die Standardeinstellungen.

beenden:
erklärt sich von selbst, oder? ;-)
Ach ja, bei beenden wird NICHT gespeichert! Abspeichern muss man manuell.


                              6.Hinweise/technische Aspekte


hmm ja, wo soll ich anfangen? ja genau, ich fange mal damit an, was den Wrapper vom Direct3D-Modus von Diablo2 unterscheidet: 

1. Der Direct3D-Modus von Diablo2 erstellt wesentlich weniger Puffer-Texturen, als der Glide-Modus, wodurch häufiger nachgeladen werden muss.

2. Der Wrapper benutzt OpenGL, der Direct3D-Modus DirectX6
 Das Manko ist hierbei, dass DirectX6 keine 8-Bit-Paletten-Texturen unterstützt und Diablo2 daher 16-Bit-Texturen benutzen muss.

3. Desweiteren ist bei DirectX die Textur-Verwaltung anders als bei OpenGL und Glide:
- bei DirectX greift man über Objekte auf die jeweilige Textur zu
- bei OpenGL greift man über eine Referenz-Nummer auf die jeweilige Textur zu
- bei Glide gibt es gar keine Textur-Verwaltung: das Programm sagt dem Treiber wo im Texturspeicher was für eine Art von Textur benutzt werden soll.
Dadurch ist es für den Programmierer aufwändiger für Glide zu programmieren, dafür kann man aber direkter auf die Grafikkarte zugreifen, was gerade bei dynamisch zu ladenden Texturen von vorteil ist. Hier liegt der Hund begraben: bei den Texturmassen, die Diablo2 hat, müssen fast alle Texturen dynamisch verwaltet werden. Und an dieser Stelle versagt Direct3D: das dynamische Laden von Texturen dauert eine ganze Ewigkeit (bei OpenGL nur 'ne Halbe)

Um diese Probleme zu umgehen muss der Wrapper u.A. wesentlich mehr Texturen erstellen, als in Glide gerade benötigt werden: bei 16Mb simuliertem Textur-Speicher kann der Wrapper durchaus 64MB Texturen in OpenGL erstellen.

Fairerweise möchte ich aber erwähnen, dass man den Programmierern bei Blizzard keine voreiligen Vorwürfe machen darf:
dreht man einfach mal die Zeit zurück und schaut sich den Stand der Technik an, wie er war, als das Spiel programmiert wurde, so war man vor das Problem gestellt, dass man mit den wenigen Ressourcen, die man hatte, haushalten musste. So gesehen holt die Direct3D-Engine von Diablo2 tatsächlich nahezu fast alles aus DirectX6 raus, was rauszuholen ist. Nur ist das halt nicht viel, bzw. die Technik hat sich soweit weiterentwickelt, dass man doch wieder mehr draus machen könnte. Nur müsste man die Direct3D-Engine neu schreiben.....oder auf OpenGL wechseln........ oder die Grafikkarten-Hersteller liefern echte Glide-Treiber für ihre Grafikkarten (DAS währe optimal, dann könnte man auch auf den Wrapper verzichten)

Aber zurück zum Wrapper
selbiger nutzt wie schon erwähnt OpenGL und stellt hier auch Ansprüche:
Es werden folgende Extensions für die korrekte Darstellung benötigt:
GL_EXT_texture_env_combine
GL_EXT_bgra
folgende Extensions sind vorteilhaft:
GL_EXT_vertex_array
GL_EXT_paletted_texture
GL_EXT_shared_texture_palette
GL_EXT_packed_pixels

Darum sollte der OpenGL-Treiber der Grafikkarte mindestens die OpenGL1.3-Spezifikation erfüllen.

wird obendrein noch die Extension GL_EXT_paletted_texture unterstützt, so werden (wenn aktiviert) 8Bit-Texturen verwendet, was das Nachladen von Texturen signifikant beschleunigt.

Da der Wrapper OpenGL benutzt, existiert hier auch der 60Hz-Bug, wenn als Betriebssystem Windows2000 oder WindowsXP installiert ist und der Wrapper nicht DirectX zum Einrichten benutzt. Lösungen zu diesem Bug gibt es im Internet zuhauf: einfach in eine Suchmaschine eintippen oder mal bei den Internet-Seiten einiger PC-Zeitschriften reinsehen.


                              7.Versionsänderungen:


Version 1.3b
in der glide3x.dll
Änderungen an den Combiner-Modi vorgenommen. Das Problem mit den Textur-Umrandungen ist damit erledigt. Auch wird jetzt schneller zwischen den Combiner-Modi gewechselt.
Wenn GL_EXT_vertex_array vom Grafikkarten-Treiber nicht unterstützt wird, greift der Wrapper auf eigene Konstrukte zurück. Der Wrapper läuft dann auch auf diesen Rechnern, wenn auch nicht ganz so schnell. Ferner sind auch die Extensions GL_EXT_texture_env_combine und GL_EXT_bgra nicht mehr zwingend notwendig, allerdings wird es zu Grafikfehlern kommen, wenn diese nicht vom Grafikkarten-Treiber zur Verfügung gestellt werden. 
Änderungen an den Wrapper-Einstellungen werden jetzt auch on-the-fly übernommen: das Spiel minimieren, Änderungen vornehmen, Spiel wieder in den Vordergrund bringen, fertig.
in der gl32oglinit.exe:
Frontend verändert
Schalter für Info-Anzeige Reihenfolge hinzugefügt
Schalter für Sprachen-Wechsel hinzugefügt
desweiteren gibt es jetzt eine deutsche "liesmich.txt" und eine englische "readme.txt"

Version 1.3a
in der glide3x.dll
kleine Änderungen an den Combiner-Modi vorgenommen. Kompatibilitätsprobleme sollten jetzt seltener auftreten.
in der gl32oglinit.exe
Schalter hinzugefügt:
Uhr
zentriert
DirectX zum Einrichten
feste Gamma-Tabelle
Maus begrenzen

Version 1.3
in der glide3x.dll
Vertex-Arrays werden verwendet und auch vorrausgesetzt. Der Prozessor wird dadurch beim Rendern der Bodentexturen weniger stark belastet. Der Wrapper kann angewiesen werden, beim Auflösungswechsel nicht vorher auf die Desktop-Auflösung zu wechseln. Der wechsel selbst geht dadurch schneller von statten, dafür wird beim Wechsel der Anwendung allerdings die Auflösung auch nicht zurückgesetzt.
in der gl32oglinit.exe:
Schalter für weichen Auflösungswechsel hinzugefügt.
Schreibfehler berichtigt.

Version 1.2
in der glide3x.dll :
Wrapperinterne Texturverwaltung modifiziert. Der Prozessor wird dadurch weniger stark beansprucht, dafür werden aber noch mehr Texturen erstellt.
Neben der Framerate kann aber auch angezeigt werden, wieviel an Texturen durch den Wrapper tatsächlich erstellt werden.
in der gl32oglinit.exe:
Schalter für zusätzliche Stats hinzugefügt.
Den Bereich für den Textur-Speicher auf 8-108MB heraufgesetzt.

Version 1.1
in der glide3x.dll :
Die an Diablo2 gemeldete Textur-Speicher-Konfiguration geändert. Das Spiel verwaltet die Texturen dadurch effizienter.
Das Aktualisieren von 16-Bit-Texturen geändert.
in der gl32oglinit.exe:
den Schalter 8-Bit-Texturen in die drei Schalter GL_EXT_palettized_textures, GL_EXT_shared_texture_palette und GL_EXT_packed_pixels aufgespalten.
Den Standard-Wert für den simulierten Textur-Speicher auf 16MB angehoben.
Den Bereich für den Textur-Speicher auf 8-64MB gesetzt.


                              8.Sonstiges


Dieser Wrapper ist Freeware und darf somit frei kopiert und weitergegeben werden, solange die Dateien selbst unverändert und beieinander bleiben.
Bei der Programmierung habe ich mein höchstes Augenmerk auf die Stabilität gerichtet, nichtsdestotrotz kann ich keinerlei Garantie dafür geben, dass der Wrapper auf jedem System einwandfrei läuft. Zu umfangreich sind die Möglichkeiten, die dafür sorgen können, dass der Wrapper denn doch Ärger auslöst.

Aber immerhin, auf den Rechnern, auf denen ich den Wrapper bisher eingesetzt habe, ist der Performance-Gewinn gegenüber dem Direct3D-Mode doch recht ansehnlich.
bye 
  Sven Labusch