Approches architecturales pour créer un menu de jeu / superposition de shell sur PC / Linux?


8

Je travaille sur une collection de jeux pour une installation de table numérique personnalisée (similaire aux tables Microsoft Surface). Chaque jeu sera un exécutable individuel qui s'exécute en plein écran. De plus, il doit y avoir un programme de superposition menu / shell fonctionnant simultanément. Le menu / shell permettra aux utilisateurs de suspendre les jeux, de passer à d'autres jeux, de vérifier leur historique de jeu, etc.

Quelques exigences clés du shell:

  • il intercepte toutes les entrées utilisateur (principalement multitouch) avant de les transmettre au jeu en cours d'exécution (afin qu'il puisse, par exemple, savoir apparaître dans une commande "pause");

  • peut révéler sur des parties arbitraires de l'écran, avec le jeu en cours d'exécution (mais vraisemblablement en pause) toujours en dessous, idéalement avec sa forme / taille dynamique, pour permettre la création d'un effet de tiroir d'entrée / sortie animé sur le jeu.

J'étudie actuellement différentes approches architecturales de ce problème, y compris les superpositions Fraps et DirectX, mais je suis sûr que je manque certaines façons de penser à ce sujet. Quelles sont les principales approches à envisager?

(Notez que le tableau est actuellement exécuté par Windows PC, mais il pourrait potentiellement être une boîte Linux à la place. Par cela, je ne veux pas dire que j'ai besoin d'une solution indépendante du système d'exploitation. Je serais satisfait d'une solution spécifique à Windows. Mais Je serais prêt à envisager de passer à Linux et d'utiliser une solution spécifique à Linux s'il est beaucoup plus facile d'y parvenir sous Linux.)

Réponses:


3

Je ne pense pas qu'il y ait vraiment beaucoup à évaluer. La performance / réactivité passe avant tout, notamment sur une installation de ce type. Vous pouvez utiliser DirectX ou OpenGL avec rendu différé / rendu à la texture (RTT).

Pour ce faire, rendez la sous-couche du shell dans le tampon d'image par défaut (le tampon avant / à l'écran), rendez votre superposition de jeu active dans un quadruple de la taille de l'écran, déplacez ce quad à la position appropriée dans l'espace mondial selon l'état actuel du "tiroir" "transition, puis restituez-la également dans le tampon d'image par défaut. Vous devriez maintenant avoir le jeu actif posé sur le shell, et c'est une opération très rapide et se prête donc à des transitions lisses (compte tenu de quelques belles mathématiques d'interpolation).

Concernant les interactions, vous pouvez même rendre la détection de hit sous / superposition parfaite au pixel si vous relisez les données RTT côté CPU, par image. Dans ce cas, vous devez renvoyer au moins le tampon de superposition en tant que masque RTT bon marché à 1 bit.

MODIFIER Une autre façon consiste à utiliser entièrement un navigateur, comme vous pouvez le faire en plein écran. Vous pouvez charger les jeux en tant que modules plutôt que d'avoir des "programmes" séparés. Le problème avec le navigateur est que vous n'obtiendrez pas les mêmes performances. Vous pouvez toujours utiliser WebGL (car vous auriez le contrôle sur le navigateur que vous utilisez) pour la superposition et les graphiques rapides, mais les jeux devraient être simples. Mis à part les performances, il pourrait être un peu plus facile à développer de cette façon, et toujours indépendant du système d'exploitation.


Faites-moi savoir si vous avez des questions;)
Ingénieur

Merci! Et juste pour vérifier, cette approche fonctionnera avec le shell et le jeu individuel fonctionnant en tant que programmes séparés?
Ghopper21

Nan. D'une manière ou d'une autre, un et un seul processus va pouvoir accéder au contexte du périphérique GPU. La seule façon dont je peux vous voir faire autrement, c'est de renoncer à l'accélération 3D ensemble - ce que je ne recommanderais pas. L'autre chose est la suivante: si vous n'êtes pas encore sûr de savoir si vous irez Win ou Lin, avec cette approche, ça va. Alors que si vous deviez choisir une approche spécifique au système d'exploitation, puis passer à l'autre système d'exploitation plus tard, cela pourrait rendre la première approche obsolète et peut-être même pas reproductible sur le système d'exploitation nouvellement choisi. Je suggère d'attendre d'autres réponses / idées.
Ingénieur

@ Ghopper21 Voir mon montage pour une approche différente.
Ingénieur

Merci Nick pour la solution de navigateur. Je pense que je veux éviter cela à cause des performances et d'autres problèmes. Mais d'après votre note, je me rends compte que je n'étais pas clair sur la partie Windows contre Linux. Je vais clarifier dans une modification de la question.
Ghopper21
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.