Architektonische Ansätze zum Erstellen eines Spielmenüs / Shell-Overlays unter PC / Linux?

8

Ich arbeite an einer Sammlung von Spielen für eine benutzerdefinierte digitale Tabletop-Installation (ähnlich wie bei Microsoft Surface-Tabellen). Jedes Spiel ist eine einzelne ausführbare Datei, die im Vollbildmodus ausgeführt wird. Außerdem muss ein Menü- / Shell-Overlay-Programm gleichzeitig ausgeführt werden. Über das Menü / die Shell können Benutzer Spiele pausieren, zu anderen Spielen wechseln, ihren Spielverlauf überprüfen usw.

Einige wichtige Anforderungen an die Shell:

  • Es fängt zuerst alle Benutzereingaben (hauptsächlich Multitouch) ab, bevor es an das aktuell ausgeführte Spiel weitergeleitet wird (damit es beispielsweise wissen kann, dass es bei einem "Pause" -Befehl angezeigt wird).

  • kann auf beliebigen Teilen des Bildschirms angezeigt werden, wobei das aktuell laufende (aber vermutlich pausierte) Spiel immer noch darunter angezeigt wird, idealerweise mit dynamischer Form / Größe, um einen animierten Ein / Aus-Schubladeneffekt über das Spiel zu erzeugen.

Ich untersuche derzeit verschiedene architektonische Ansätze für dieses Problem, einschließlich Fraps- und DirectX-Overlays, aber ich bin mir sicher, dass mir einige Möglichkeiten fehlen, darüber nachzudenken. Was sind die wichtigsten Ansätze, über die ich nachdenken sollte?

(Beachten Sie, dass die Tabelle derzeit von einem Windows-PC ausgeführt wird, es sich jedoch möglicherweise um eine Linux-Box handelt. Damit meine ich nicht, dass ich eine betriebssystemunabhängige Lösung benötige. Ich würde mich über eine Windows-spezifische Lösung freuen Ich wäre bereit, einen Wechsel zu Linux und die Verwendung einer Linux-spezifischen Lösung in Betracht zu ziehen, wenn dies unter Linux viel einfacher zu erreichen ist.)

Ghopper21
quelle

Antworten:

3

Ich glaube nicht, dass es wirklich viel zu bewerten gibt. Leistung / Reaktionsfähigkeit stehen an erster Stelle, insbesondere bei einer Installation dieser Art. Sie können entweder DirectX- oder OpenGL-verzögertes Rendern / Rendern in Textur (RTT) verwenden.

Rendern Sie dazu die Shell-Unterlage in den Standard-Frame-Puffer (den Front- / Onscreen-Puffer), rendern Sie Ihre aktive Spielüberlagerung in ein Quad in Bildschirmgröße und verschieben Sie dieses Quad gemäß dem aktuellen Status von "Schublade" an die entsprechende Position im Weltraum "Übergang, dann rendern Sie es auch zum Standard-Frame-Puffer. Sie sollten jetzt das aktive Spiel über die Shell legen lassen, und es ist eine sehr schnelle Operation und eignet sich daher für raffinierte Übergänge (angesichts einiger netter Interpolationsmathematik).

Bei Interaktionen können Sie die Erkennung von Unter- / Überlagerungstreffern sogar pixelgenau machen, wenn Sie die RTT-Daten pro Frame auf die CPU-Seite zurücklesen. In diesem Fall müssten Sie mindestens den Überlagerungspuffer als billige 1-Bit-Masken-RTT zurückgeben.

BEARBEITEN Eine andere Möglichkeit besteht darin, vollständig browserbasiert zu arbeiten, da Sie den Vollbildmodus ausführen können. Sie könnten die Spiele als Module laden, anstatt separate "Programme" zu haben. Das Problem mit dem Browser ist, dass Sie nicht die gleiche Leistung erzielen. Sie könnten WebGL weiterhin verwenden (da Sie die Kontrolle darüber hätten, welchen Browser Sie verwenden würden), um Ebenen und schnelle Grafiken zu erstellen, aber die Spiele müssten einfach sein. Abgesehen von der Leistung ist es möglicherweise ein bisschen einfacher, sich auf diese Weise zu entwickeln, und dennoch betriebssystemunabhängig.

Ingenieur
quelle
Lassen Sie mich wissen, wenn Sie irgendwelche Fragen haben;)
Ingenieur
Vielen Dank! Und nur um zu überprüfen, ob dieser Ansatz mit der Shell und dem einzelnen Spiel funktioniert, die als separate Programme ausgeführt werden?
Ghopper21
Nee. Auf die eine oder andere Weise kann nur ein Prozess auf den GPU-Gerätekontext zugreifen. Die einzige Möglichkeit, wie Sie dies anders sehen können, besteht darin, gemeinsam auf die 3D-Beschleunigung zu verzichten - was ich nicht empfehlen würde. Die andere Sache ist folgende: Wenn Sie noch nicht sicher sind, ob Sie Win oder Lin spielen werden, ist dieser Ansatz in Ordnung. Wenn Sie dagegen einen betriebssystemspezifischen Ansatz auswählen und später auf das andere Betriebssystem wechseln, ist der erste Ansatz möglicherweise veraltet und auf dem neu ausgewählten Betriebssystem möglicherweise nicht mehr replizierbar. Ich schlage vor, auf weitere Antworten / Ideen zu warten.
Ingenieur
@ Ghopper21 Siehe meine Bearbeitung für einen anderen Ansatz.
Ingenieur
Danke Nick für die Browser-Lösung. Ich denke, ich möchte das aufgrund der Leistung und anderer Probleme vermeiden. Aus Ihrer Notiz geht jedoch hervor, dass mir der Windows- und der Linux-Teil unklar waren. Ich werde in einer Bearbeitung die Frage klären.
Ghopper21