2010-11-12 11 views
3

On m'a demandé d'enquêter sur le portage de 10 ans Direct X (v7-9) jeux OpenGL ES, d'abord pour l'iPhoneDirectX OpenGL Porting ES (iPhone)

Je n'ai jamais entrepris un port de jeu comme celui-ci avant (et embauchera quelqu'un pour le faire) mais j'aimerais comprendre le processus.

  1. Y at-il des ressources/livres/blogs qui m'aideront à comprendre le processus?
  2. Y a-t-il des projets comme Mono qui peuvent accomplir cela?
+0

S'agit-il de jeux PC, pour un ordinateur de bureau, que vous souhaitez connecter à un appareil mobile? Quelle est l'intensité des graphiques, je suppose qu'ils sont en 3D, est le taux de rafraîchissement attendu 30 fps?Profitez-vous de ce que propose DirectX9? –

+0

Oui, ils sont des jeux de bureau avec 3D, mais rien de très spécial, ils ont tous 10 ans, et assez simpliste. – rjstelling

Répondre

6

TBH Un travail de portage comme celui-ci est impliqué mais assez facile.

Vous commencez par remplacer tous les appels DirectX par des «stubs» (c'est-à-dire des fonctions vides). Vous faites cela jusqu'à ce que vous puissiez obtenir le logiciel à compiler. Une fois compilé, vous commencez à implémenter toutes les fonctions stub. Il y aura un certain nombre de pièges en cours de route, mais cela en vaut la peine.

Si vous avez besoin de porter et de prendre en charge des téléphones avant l'iPhone 3GS, vous avez une tâche plus complexe car le matériel ne prend en charge que GLES 1 qui est uniquement à fonction fixe. Vous devrez "émuler" ces shaders d'une manière ou d'une autre. Sur les plates-formes mobiles, j'ai écrit, dans le passé, du code assembleur qui effectue un "vertex shading" directement sur les données de vertex. L'ombrage des pixels est souvent plus compliqué, mais vous pouvez généralement fournir suffisamment d'informations via le "vertex shading" pour que cela fonctionne. Certaines fonctionnalités graphiques que vous pourriez avoir à laisser tomber.

Les versions ultérieures de l'iPhone utilisent GLES 2 donc vous avez accès à GLSL ... ATI a écrit, et Aras P de la renommée de Unity3D a étendu, le logiciel qui portera HLSL code to GLSL. Une fois que vous avez fait tout cela, vous passez à l'étape de l'optimisation. Vous trouverez probablement que votre premier passage n'est pas très efficace. C'est parfaitement normal. À ce stade, vous pouvez regarder le code d'un niveau supérieur et voir comment vous pouvez déplacer le code et faire les choses différemment pour obtenir les meilleures performances.

En résumé: Votre première étape consistera à compiler le code sans DirectX. Votre prochaine étape sera le portage réel des appels DirectX vers les appels OpenGL ES. Enfin, vous voudrez refactoriser le code restant pour de meilleures performances.

(P.S.: Je serais heureux de faire le travail de portage pour vous Contactez-moi par ma page linkedin dans mon profil;)).

0

Pas une réponse complète, mais dans l'espoir d'aider un peu ...

Je ne suis pas au courant de quoi que ce soit le ciblage OpenGL ES spécifiquement, mais Cadega, cidre et VirtualBox - entre autres - fournir une traduction des appels DirectX aux appels OpenGL, et OpenGL ES est, en gros, OpenGL avec beaucoup de bits très rarement utilisés et certaines parties plus lentes et redondantes supprimées. Il serait donc utile d'étudier au moins ces produits. Au moins VirtualBox est open source. La partie SGX de l'iPhone 3GS a un pipeline entièrement programmable, ce qui le rend équivalent à une partie DirectX 10, donc le matériel est là. L'ancienne MBX est un pipeline fixe avec l'extension dot3 mais aucune carte de cube et seulement deux unités de texture. Il a également l'extension de la palette de la matrice, de sorte que vous pouvez faire une bonne animation et un bon éclairage si plusieurs passes est acceptable.