Je vais essayer de faire ici une présentation du
wrapper .NET non officiel d'Irrlicht : Irrlicht .NET CP (Cross-Platform).
Je ne garantie pas que ça soit court, mais ça sera complet (peut-être même un peu trop, notamment pour décrire Irrlicht).
Note de préambule :
Irrlicht .NET CP est un
wrapper pour Irrlicht en C#. Il ne sagit pas du
wrapper officiel (nommé "Irrlicht .NET"), ni d'un projet créé/géré par l'équipe du moteur Irrlicht. Ce n'est pas non plus un projet concurrent du
wrapper officiel, c'est un projet qui a même commencé sur une ligne complètement différente, voilà pourquoi je ne comparerai pas forcémment les deux, mais justifierai juste les grandes lignes.
Présentation :
Irrlicht .NET CP (CP = Cross-Platform, multi-plateforme) est un
wrapper entièrement codé sous Linux pour le moteur Irrlicht. La base du projet est donc de fournir un moteur 3D complet, disponible sur Linux, Mac OS et Windows, et fonctionnant pour n'importe quel langage .NET (au hasard, C#, VB .NET, Delphi .NET, C++/CLI, F#...). Il a été commencé en Juin 2006 et la première release a été faite début Juillet 2006 sur le forum d'Irrlicht.
Je suis pour l'instant le seul membre de l'équipe mais j'ai reçu de l'aide d'une très grande quantité de personnes, pour le debug notamment.
License :
Avant tout je précise que le
wrapper est sous la même license que le moteur Irrlicht, à savoir zlib/libpng, celle-ci autorise n'importe qui à modifier, recompiler, redistribuer le
wrapper sans aucune limitation ni obligation si ce n'est celle de ne pas prétendre avoir écrit le logiciel de base, celle de ne pas prétendre que l'auteur du logiciel de base est responsable de votre modification et celle de bien vouloir (si possible) citer l'auteur et/ou mettre un lien.
Cependant, en utilisant le
wrapper on utilise Irrlicht qui elle-même utilise les travaux du groupe JPEG et qui eux sont sous une license demandant de citer le nom obligatoirement (plus d'infos sur leur site).
Techniques :
Avant de se lancer dans l'explication, il faut d'abord mettre une chose au clair : "Irrlicht .NET CP" n'est le nom que d'une des deux parties du
wrapper.
Il y a en réalité deux parties :
- IrrlichtW, wrapper en C de la librairie Irrlicht, créé par l'équipe d'Irrlicht .NET CP.
- Irrlicht .NET CP, wrapper en C# d'IrrlichtW.
Les langages utilisés sont donc :
- C : partie externe d'IrrlichtW
- C++ : partie interne d'échanges avec Irrlicht
- C# : wrapper .NET
La librairie en C est appelée par le code C# au moyens des Platform Invoke, technique fonctionnant à la fois sous le framework .NET et sous le runtime Mono (pour Linux et autres plateformes).
Ainsi, Irrlicht .NET CP n'existe qu'en une seule version et ce pour toutes les plateformes, alors qu'IrrlichtW existe en une version pour chaque plateforme (IrrlichtW.dll/Irrlicht.dll pour Windows, IrrlichtW.so pour Linux, IrrlichtW.dylib -non officielle- pour Mac OS X).
De même, une application codée dans n'importe quel langage .NET, sous n'importe quel système d'exploitation supporté marchera sans aucune recompilation ni d'Irrlicht .NET CP, ni du programme en question.
Notez enfin qu'IrrlichtW ne constitue pas la partie la plus importante du
wrapper. En effet, IrrlichtW n'est utilisé que pour faire fonctionner Irrlicht .NET CP, et n'est pas calculé pour être utilisé directement (bien qu'il puisse l'être).
Etat d'Avancement :
- 99.9% des librairies de base d'Irrlicht sont retranscrites (je ne met pas 100% car il se peut que j'ai fait un oubli mais en général quand c'est le cas, il est corrigé immédiatement).
- La capacité de créer ses propre SceneNode dans un langage .NET est présente, il en est de même pour les animateurs, les affecteurs de particules et les émetteurs de particules.
- Irrlicht .NET CP se dote d'une fonction inédite dans sa version 0.6 : Irrlicht Extensions. Il sagit d'une librairie anexe fournissant une série de SceneNode et autres utilitaires à utiliser avec Irrlicht .NET CP très simplement et directement dans le code .NET. De plus, toute extension est sous license zlib/libpng.
Avantages (et comparaison) :
- Un taux d'avancement bien plus élevé.
- Des fonctions qui ne seront jamais présentes probablement dans Irrlicht .NET officiel telles que les Custom Scene Nodes ou les animateurs personnalisés.
- Une architecture très évolutive, ajouter une fonction à la librairie nécessite peu de lignes de code et le tout reste très facilement compréhensible.
- Une architecture aussi très calculée et optimisée, travailler sous Linux/Mono oblige à une rigueur quant aux fonctionnalités que l'on utilise et à l'optimisation du tout, cette obligation permettant au wrapper de parfois tourner plus vite que son équivalent en natif.
- Taux de progression plus élevé, je ne garantie pas que ça reste le cas pendant les 30 années à venir mais le moteur évolue actuellement très vite, avec de nouvelles fonctionnalités/extensions chaque jour ainsi que des "bugfixes" très fréquents.
- Avantage imparable : Aspect multi-plateforme, qui ne peut pas être présent avec la technique qu'emploie le wrapper officiel.
Sur ce dernier point je rajouterai qu'Irrlicht .NET CP est actuellement le seul vrai moteur .NET tournant sur Linux (avec possibilité de MacOS). J'ai reçu quelques mails à ce sujet, notamment comme quoi OgreDotNet "pouvait" tourner sur d'autres plate-formes cependant Irrlicht .NET CP est garanti puisque codé sous Linux. Il ne plantera pas sous Linux, ni sous Windows pour X ou Y raisons. Tout ce qui est testé sur l'un l'est sur l'autre et tout ce qui marche sur l'un doit marcher sur l'autre.
Il n'y a que 1% du code d'IrrlichtW qui varie selon le système d'exploitation et il sagit des préfixes d'exportation des librairies...
Mini compilation de FAQ :
- Q : Je n'y connais rien moi à Linux... J'ai mon VIsual Studio et ça me suffit ! Ca veut dire que mon application ne tournera jamais sous Linux ?
- R : Faux, avec Irrlicht .NET CP, n'importe quelle application faite avec n'importe quel système d'exploitation tournera sur n'importe quel autre système d'exploitation. Pour l'instant deux systèmes sont supportés officiellement : Windows et Linux, mais Mac OS est fonctionnel et testé. Il faut cependant nuancer en disant que si vous utilisez d'autres fonctionnalités qu'Irrlicht .NET CP dans votre jeu, rien ne garantie que celles-ci fonctionnent avec d'autres systèmes.
- Q : Est-ce qu'en utilisant Irrlicht .NET CP je vais faire perdre beaucoup de FPS ? J'ai lu partout que le code .NET était plus lent !
- R : On ne fait pas de troll mais en terme d'affichage 3D, ce qui est lourd sont tous les calculs faits par le moteur et par la carte graphique. Dans le cas d'Irrlicht .NET CP, tout ce code est un code natif c'est à dire en C++. D'ailleurs dans une petite application bien codée, la perte de FPS est NULLE car au final, ce qui prend 99% du temps c'est le code natif (IrrlichtW donc). Maintenant dans une énorme application utilisant plein de scene nodes écrites en langage .NET et tournant au maximum des ressources, il est impossible de répondre à la question. Sachez juste que plus important que le langage que l'on utilise, la manière dont on l'utilise détermine tout.
- Q : J'y crois pas, je vois pas pourquoi je téléchargerais une librairie faite par un inconnu en deux semaines alors que le wrapper officiel est là depuis plus d'un an et créé par le créateur d'Irrlicht... Expliquez-moi, comment c'est possible ?
- R : J'ai eu des tonnes de questions analogues, y répondre précisémment prendrait l'espace de tout un post d'autant plus que je l'ai déjà fait en français. (
cliquez ici pour lire la discussion).
- Q : Je suis séduit ! Seulement voilà j'ai mon application tournant déjà avec Irrlicht .NET officiel et je me demande si changer pour .NET CP sera dur. Qu'en est-il ?
- R : Probablement la seule réponse triste, changer du wrapper officiel au wrapper CP n'est pas forcémment aussi simple qu'on pourrait l'imaginer et ce pour plusieurs raisons. La première est que j'ai voulu coller aux conventions de nommage de la plateforme .NET qui n'étaient pas forcémment respectées dans le wrapper officiel. La seconde est que je n'ai pas forcémment recopié les mêmes fonctions surchargées donc parfois une fonction n'a pas assez ou trop d'argument par rapport à la version du wrapper officiel. Enfin la dernière est que j'ai collé trait pour trait à l'architecture de la version C++ du moteur ce qui parfois peut entraîner des changements dans le code. J'ai l'habitude de répondre que quand on connaît un minimum les deux wrappers, changer de l'un à l'autre prend dans les 2 - 3 heures pour une dizaine de milliers de lignes de code (ce qui correspond à un petit jeu), ce qui n'est pas négligeable (encore que...). A vous de voir après si vous désirez changer.
Liens :
Page principale du wrapper (anglais)Forum du wrapper (anglais)Page SourceForge du wrapper (anglais)