Start Entwicklung GameInput statt XInput: Microsoft veröffentlicht Portierungsleitfaden für GDK-Entwickler

GameInput statt XInput: Microsoft veröffentlicht Portierungsleitfaden für GDK-Entwickler

0
GameInput statt XInput: Microsoft veröffentlicht Portierungsleitfaden für GDK-Entwickler
GameInput statt XInput: Microsoft veröffentlicht Portierungsleitfaden für GDK-Entwickler - Bild: Microsoft Learn GDK-Dokumentation

Microsoft hat im Game Development Kit (GDK) einen Leitfaden zur Portierung von XInput auf GameInput dokumentiert, der Studios den Umstieg von der älteren Eingabe-Schnittstelle auf die aktuelle GameInput-API beschreibt. Laut Dokumentation gilt dieser Wechsel als der unkomplizierteste unter den Legacy-APIs, weil GameInput stark vom einfachen Programmiermodell von XInput beeinflusst wurde. Viele XInput-Funktionen lassen sich daher eins zu eins auf Entsprechungen in GameInput abbilden. Das passt zur breiteren Werkzeug-Offensive, mit der Xbox zuletzt auch beim GDK und seinen Plug-ins für Unreal-Workflows nachgelegt hat.

Der zentrale Unterschied liegt im Programmiermodell. XInput besteht aus einer Sammlung flacher C-Funktionen, während GameInput auf C++ und Interfaces setzt, vergleichbar mit den Grafik- und Audio-APIs des GDK. Microsoft weist darauf hin, dass diese Interfaces zwar wie COM aussehen, aber keines sind. Für die Nutzung reicht ein grundlegendes Verständnis von Reference Counting aus. In der Praxis erschwere der C++-Ansatz den Code nicht und wirke sich nicht auf die Performance aus.

So unterscheidet sich das Auslesen der Eingaben

Bei XInput durchlaufen Spiele üblicherweise die User-Indizes, bis ein verbundenes Gerät gefunden wird, und lesen dann dessen Zustand über XInputGetState aus. GameInput dreht diese Logik um: Eingaben werden zunächst ohne Angabe eines konkreten Geräts abgefragt, etwa per GetCurrentReading über alle Gamepads gleichzeitig. Erst danach kann das auslösende Gerät abgefragt und für gezielte Folgeabfragen weitergereicht werden. Damit entfällt die explizite Geräte-Enumeration, was laut Microsoft zu einfacheren Algorithmen führt.

Verändert hat sich auch die Darstellung der Analogwerte. XInput liefert Trigger-Werte als BYTE und Thumbstick-Werte als SHORT. GameInput gibt diese Werte als float zurück, bei Triggern im Bereich von 0 bis 1 und bei Thumbsticks von minus 1 bis 1. Beim Rumble-Feedback ruft XInput direkt XInputSetState auf, während GameInput zunächst die IGameInputDevice-Instanz des Geräts beschafft und anschließend deren Methode SetRumbleState nutzt. Auf der Konsole liefert GameInput Eingaben nur, wenn die Anwendung den Fokus hat, andernfalls werden neutrale Ruhewerte zurückgegeben. Der bei XInput nötige Aufruf von XInputEnable entfällt damit. Auf dem PC gehen Eingaben standardmäßig an alle Prozesse; künftig soll sich dieses Verhalten über SetFocusPolicy ändern lassen.

XInputOnGameInput als Brücke für bestehenden Code

Für Studios, die nicht sofort vollständig umstellen wollen, liefert das GDK eine Header-Datei namens XInputOnGameInput.h. Sie implementiert die XInput-API auf Basis von GameInput. Statt XInput.h binden Entwickler XInputOnGameInput.h ein, nutzen den zugehörigen Namespace und kompilieren ihren Code neu. Microsoft empfiehlt dennoch die direkte Portierung auf GameInput, besonders wenn Tastatur, Maus oder weitere Eingabegeräte unterstützt werden sollen. Der Wrapper dient vor allem dazu, einen ersten Portierungsschritt ohne Änderungen am bestehenden XInput-Code zu ermöglichen, und kann zugleich als Beispiel für die Verwendung der GameInput-API dienen. Eine ähnlich gelagerte Hilfestellung für den PC-Einstieg bot Microsoft kürzlich mit einem Godot-Beispiel für die Xbox-Entwicklung.

Der Wrapper ist als direkter Drop-in-Ersatz angelegt, weicht aber an einigen Stellen ab. Unterstützt wird zur Vereinfachung nur Gamepad-Hardware; für Lenkräder oder Arcade-Sticks ist GameInput direkt oder eine Erweiterung des Wrapper-Codes nötig. Eingaben kommen auch hier nur bei aktivem Fokus, unabhängig von XInputEnable. Der Wert von XUSER_MAX_COUNT wurde von 4 auf 8 erhöht, weshalb Microsoft zur Prüfung von hartkodierten Annahmen bei XInputGetKeystroke rät, um einen Buffer Overrun zu vermeiden. Da die Implementierung als hochperformant und lock-free beschrieben wird, eignet sie sich laut Microsoft auch für den Produktiveinsatz. Hinzu kommen Funktionen wie XInputSetStateEx mit Unterstützung für Trigger-Motoren, XInputGetStateWithToken zur Verknüpfung von Eingaben mit Grafik-Frames für die Analyse in PIX sowie XInputGetDeviceId. Über Präprozessor-Makros wie XINPUT_ON_GAMEINPUT_EXPLICIT_INITIALIZATION lässt sich das Verhalten zusätzlich feinjustieren.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein