ZeHa hat geschrieben:Das ist aber was völlig anderes - sag mir Bescheid falls ich mich irre, aber meinst Du nicht einfach nur die Parallelisierung der Grafik-Prozessoren?
Bescheid.
Grafikkarten haben immer eine GPU. Für die 2-GPU-Lösung brauchts spezielle
Grafiktreiber, die nVidia und ATI jeweils für das entsprechende Spiel raus bringen
müssen. Grafikkarten, die direkt 2 GPUs eingebaut haben, sind halt von Haus
als 2 Grafikkarten an zu sehen. Und diese Variante gibs eigentlich immer nur mit
den Spitzenmodellen. Die 2. bringt nur was, wenn es entsprechende Treiber für
das Spiel gibt. Es gibt auch andere Möglichkeiten, um eine 2. Grafikkarte aus zu
nutzen, aber das ist nicht Sache des Spieleentwicklers, sondern Treibereinstellung.

Unter Multithreading ist immer die CPU gemeint, also auch bei DX11.
Wobei natürlich hier vorallem CPU-Aufgaben zwecks der Grafik im Fordergrund
stehen. Aber das nur am Rande, für uns PB-Jünger spielt das natürlich weniger
eine Rolle. Höchstens wenn OGRE mal DX11 kann. Ich wollte das nur mal erwähnen.
Doch zurück zum eigentlichen Thema. Ich hab aktuell in meinem Spiel an vielen
stellen Erstellung neuer Objekte, Entfernen, Schleifen in denen die Objektpositionen
aktualisiert werden usw. Um die Gamelogik nun splitten zu können, muss ich
zwangsweise alles grafische bündeln. Erst wenn alles sauber getrennt ist, kann
ich überhaupt mit Threads anfangen. Da DX9 alls in einem Thread braucht, liegt
es daher nahe, auch einen entsprechenden Thread dafür zu starten. Ich werd mir
dafür ein kleines Eventsystem basteln, das alle Grafikaktionen wie erstellen und
entfernen von Entities behandeln kann. Die einen Threads schreiben rein, der
Grafikthread liest alles aus und verarbeitet dann. Nach dem alles verarbeitet ist, wird
gerendert. Während des Verarbeitens und Renderns können die Gamelogik-Threads
wieder neue Events generieren. Und wenn man es richtig macht, kann sogar
teilweise während des einlesens von Events weiter neue Events generiert werden.
So kann das Spiel mit 25 FPS laufen ... die Steuerung reagiert trotzdem flüssig,
Kollision bleibt sauber, Pathfinding lässt die Kerne glühen und die Bewegung
verläuft intern ohne sprünge, so das selbst wenn die FPS mal in den Keller fallen
sollte, das Spiel stabil weiter läuft. Aber vorallem, während des Renderns muss die
CPU nicht auf die Grafikkarte warten.
Und wen es interessiert: So lange wir keine "StaticGeometry" haben, läuft bei der
OGRE3D implementierung (DX9) von PureBasic mehr über die CPU, als einem lieb
ist. Da ist es sogar unumgänglich, einen eigenen Thread für die Grafikbefehle zu
haben. Und ich kann nur hoffen, das PB mir keinen Strich durch die Rechnung macht
durch einen Bug, der Auftaucht wenn ich Threads nutze.
MFG PMV