Bonjour lecteurs. L'année dernière, j'ai publié mon projet de loisirs,
l'émulateur Red Omega PS2 . L'idée était d'adapter le contrôle de l'émulateur PCSX2 d'origine pour les jeux sur la Surface Pro via l'écran tactile.
Le code de l'émulateur PCSX2 d'origine a été réécrit sous la forme d'un module DLL, chargé en code C # avec une interface graphique sur WPF. Le projet s'est avéré réalisable et réussi - Final Fantasy X et Final Fantasy XII ont explosé. Mais il y a six mois, je suis tombé sur un lien vers Valkyria Chronicles 4 sur Steam. J'ai acheté les premières Chroniques de Valkyria sur le disque et je me suis «frappé», mais il y a une question - où sont les deuxième et troisième!?! La réponse a été trouvée rapidement - ces suites ne sont sorties que sur les consoles de jeux. Les versions disponibles pour la PlayStation Portable se sont avérées être les plus accessibles - via l'émulateur PPSSPP. Le smartphone n'est pas mauvais, mais sur la Surface Pro, je n'aimais pas les commandes via Touch. Oui, et passer d'Omega Red à PPSSPP, et vice versa n'est pas une chasse. Et puis une idée "folle" est apparue - réécrire le code PPSSPP d'origine sous la forme d'un module DLL !!! Et transformez Omega Red en une PLATEFORME pour les jeux PlayStation 2 et PlayStation Portable !!!
Facile à dire, mais beaucoup plus difficile à faire. L'émulateur PPSSPP original est développé en tant que projet Open Source et est disponible sous la forme d'un code complet pour étude et modification. Le code est intéressant et peut être exécuté sur une variété d'API graphiques: OpenGL, DirectX9, DirectX11, Vulkan. De plus, il possède une interface graphique intégrée. Mais l'architecture PPSSPP est plus «claire» que PCSX2 - plus de modularité et de dépendances sont simplifiées. La clé principale pour réaliser mon idée était la possibilité de charger un disque de jeu et de l'enregistrer comme argument dans le programme. La solution élémentaire consiste à réécrire la fonction EXE d'entrée dans la fonction DLL EXPORTED. Bien sûr, il y aura des problèmes avec la création d'une deuxième «fenêtre», la redirection de la sortie du rendu graphique vers le contexte graphique WPF, la connexion du code tactile, etc. etc., mais j'ai déjà décidé tout cela quand j'ai réécrit le code pour PCSX2 - des modèles réalisables existent déjà.
Quel est le résultat - la solution fonctionne! Il était possible de combiner deux émulateurs si différents dans une seule solution avec une commutation transparente entre les jeux pour différents émulateurs. Le résultat peut être évalué sur la vidéo:
De plus, je voudrais mentionner les changements suivants, par rapport à la première version de l'
émulateur Red Omega PS2 :
1. Modification du schéma de couleurs - les commentaires ont indiqué l'inconvénient du schéma de couleurs de l'interface - rouge. Un inconvénient étrange - mais j'ai décidé d'ajouter une gamme inversée de "Blue":

2. Tessellation - la fonction "Tessellation" de DirectX 11 a été ajoutée pour les jeux PCSX2. Cette fonction vous permet d'augmenter le nombre de polygones pour les modèles:

La tessellation est sélectionnée dans l'option «Schéma de rendu»:

PAR DÉFAUT

Tessellé

PAR DÉFAUT

Tessellé

3. FXAA - pour les jeux sur PCSX2, la fonction "Activer FXAA" a été ajoutée pour supprimer les étapes le long des limites des polygones - la solution ne fonctionne pas parfaitement, mais elle fonctionne:

4. Sauvegarde rapide - enregistrez l'état de l'émulateur avec une seule commande:

5. Contrôle du volume:

Actuellement, le programme est disponible sur:
Omega Red et présenté sur GitHub:
OmegaRed