Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: Template VSIX pour la SFML.Net 2.0  (Lu 7180 fois)

0 Membres et 1 Invité sur ce sujet

RadicalEd

  • Newbie
  • *
  • Messages: 16
    • Voir le profil
Template VSIX pour la SFML.Net 2.0
« le: Juillet 05, 2013, 06:18:05 pm »
Bonjour à tous.

C'est mon premier message sur le forum mais je pratique le développement avec le binding SFML depuis un petit moment.

Aujourd'hui j'avais du temps à perdre et j'me suis dit que je pourrais éventuellement fabriquer un template vsix pour visual studio 2010 et 2012.

Je me suis donc lancé sur le sujet et je souhaite faire part de deux trois remarques sur le binding en lui-même. J'ai quelque question pour Laurent, mais je penses que le sujet peut intéressé du monde ;p

Mon objectif avant tout est de préparer un template complet qui met en place tout seul la structure d'un application utilisant SFML.Net.
J'ai donc dès le départ pris en considération la copie automatique des librairies csfml-*-2.dll afin que dès la création du projet, un simple F5 permette de démarrer l'application sans avoir à faire d'action manuelle.

Jusqu'ici pas de problème mais je me suis vite rendu compte que je ne prenais pas en considération le bitage, donc en cas de changement de plateforme pour builder cela ne fonctionnait qu'en 32bits (logique). J'ai donc récupérer les deux versions de la SFML.Net et c'est là que je me suis rendu compte de deux trois trucs.

Dans le binding les librairies ne sont pas MSIL (AnyCPU). Dans un contexte pour l'on peut builder en 32bits ou 64bits c'est une préconisation Microsoft d'utiliser ce mode de build.
J'ai donc récupérer les sources, j'ai converti la solution VS 2008 en 2010 et j'en ai profité pour passer les librairies en 4.0. Maintenant cela me permet d'avoir toujours les mêmes librairies en référence dans mon projet de template quelque soit le bitage finale.

Ensuite j'ai fait un hiérarchie répertoire de dépendance contenant les versions 32 et 64 des autres lib. Un coup d'edit dans le fichier de build et en fonction de la plateforme les librairies de dépendances sont copiées en conséquence.

Une fois tout ça fait j'ai donc pu lancer mon projet de template via F5 quelque soit la plateforme. Et ça marche fortement bien ^^.

Voici quelque screen du template :


C'est partie pour un nouveau projet ;)


Le cas d'exemple bien pompé des tutoriels ;). A noter que l'icone de base de la fenêtre est automatiquement inclut lors de la création du projet.


Structure globale du template, avec un seul jeu de librairies SFML pour tout les types de plateforme de build (x86, x64, AnyCPU).


Donc voilà le template est compatible VS2010 et VS2012 pour toutes les versions (y compris Express).

Laurent, il peut être possible d'ajouter ce template dans la galerie en ligne (je n'ai pas encore regarder mais ça doit être jouable).
Cependant pour la création du template (pas de la SFML) j'ai spécifié en auteur mon nom, si cela te dérange je peux changer.
Autre point, au vu de la partie build, j'ai du recompiler en .Net 4.0 et AnyCPU ce qui ne correspondant pas au livrable que toi tu fournit sur le site... Je penses que je ne le publierais pas sans ton accord, au pire je filerai un lien et les gens intéressés pourront l'installer (de plus je ne sais pas si il y aura des régressions causées par cette montée de version, j'en doute mais méfiance).

Donc voilà, en fait par ce template c'est surtout l'envie d'aller chercher dans les extensions en ligne le binding SFML et de lancer un nouveau projet sans se prendre trop la tête.
Cela peut aussi augmenter la visibilité de ta technologie ;).

Pour l'instant je ne donne pas de liens pour test ou autre, j'vais essayer d'inclure au template une catégorie de projet type bibliothèque de classe.

A++
RadicalEd
« Modifié: Juillet 05, 2013, 06:23:49 pm par RadicalEd »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Template VSIX pour la SFML.Net 2.0
« Réponse #1 le: Juillet 05, 2013, 07:02:07 pm »
Ca c'est cool, merci :)

J'aurais bien fait un unique package AnyCPU, mais je savais pas comment gérer les dépendances 32/64 bits. Du coup ça marche comment là ? Si tu m'expliques je me ferai un plaisir de convertir les projets, et de refaire une release.

Ensuite ça apporte quoi de passer en .Net 4.0 ? Ca a quelles implications exactement ? Moi j'avais dans l'idée que de rester sur une vieille version m'assurait d'avoir un maximum de compatibilité.

L'auteur du template c'est toi, donc tu peux bien sûr mettre ton nom ;)
Laurent Gomila - SFML developer

RadicalEd

  • Newbie
  • *
  • Messages: 16
    • Voir le profil
Re : Re : Template VSIX pour la SFML.Net 2.0
« Réponse #2 le: Juillet 05, 2013, 08:14:46 pm »
Ca c'est cool, merci :)

De rien, tu bosse comme un malade sur la SFML, normal que de temps en temps des gens te rendent la pareil ;)

J'aurais bien fait un unique package AnyCPU, mais je savais pas comment gérer les dépendances 32/64 bits. Du coup ça marche comment là ? Si tu m'expliques je me ferai un plaisir de convertir les projets, et de refaire une release.

C'est bien la difficulté, faire un package qui contient tout implique que tu build les dll .Net en AnyCPU et que tu fournisses les deux jeux de bitage pour les librairies natives.
C'est souvent source d'erreur pour l'utilisateur au final, d'où justement un template comme le miens qui va abstraire la préparation du livrable.
Je penses qu'il serait acceptable de garde les deux release pour pas perdre les gens mais d'inclure dans la partie librairie .Net uniquement celle qui seront considérer par Windows comme MSIL.
Après je peux pas te dire si c'est réellement une solution viable, parce que j'ai cru comprendre que le binding été compatible avec Mono, et du côté de Mono je ne sais pas comment ça se passe sous Linux et Mac OS X. Donc IMHO ça représente un risque.
Pour Windows le VSIX que je peux faire est une bonne solution de contournement, après quand je disais que le rebuild de mon côté est un frein c'est parce que c'est ta propriété intellectuel et que il n'y a pour moi que toi qui peut être garant du livrable final ;).

Pour ta question sur le comment ça marche en fait c'est ultra simple.
Le binding est au final la couche d'abstration donc lui il ne doit pas dépendre d'un bitage. Quand tu développe ton application c'est là que tu spécifie ta plateforme, et donc ton binding est malléable parce qu'au build c'est uniquement les libs natives en bas niveau qui correspondent et qui vont se retrouver dans le livrable. Au final ça inclut que quand tu build dans VS tu choisit ta plateforme et c'est toute la hiérarchie qui s'adapter à cette plateforme choisit.
Résultat : Ton application à ses références sur les bibliothèques intermédiaires AnyCPU et du coup quand tu change de bitage tu n'a pas besoin de changer les références liées directement dans le projet d'application, MS Builder doit fait le taf pour toi.
Dans mon template ça marche comme ça, en fonction de la plateforme attaquée, MS Build envoie dans le dépôt du livrable uniquement les librairies qu'y correspondent au bitage de l'application et ta SFML en AnyCPU fait la passerelle sans bronché :)


Ensuite ça apporte quoi de passer en .Net 4.0 ? Ca a quelles implications exactement ? Moi j'avais dans l'idée que de rester sur une vieille version m'assurait d'avoir un maximum de compatibilité.

.Net 4.0 (et aussi 4.5) apporte énormément de trucs.
Déjà il faut savoir que la version .Net 3.0 et 3.5 sont basé sur la Common Language Runtime 2.0 qui est la même que pour .Net 2.0. Donc pas d'évolution technique mais un nombre de feature à gogo :

- Les méthodes d'extension : Cas classique, tu as une structure mais il manque des choses dedans. Tu peux pas hériter donc tu es bloqué. Et bien en fait non, avec les méthodes d'extension tu va pouvoir enrichir la classe sans soucis. Exemple, dans XNA la struct rectangle n'a pas de méthode Contains pour les Vector2 (uniquement pour les Points qui encapsulent du int) et bien osef pour moi je vais enrichir la classe avec une méthode d'extension :

        public static bool Contains(this Rectangle rectangle, Vector2 vector)
        {
            return rectangle.Contains(new Point((int)vector.X, (int)vector.Y));
        }

Du coup dans mon code je peux faire directement ça : myRectangle.Contains(new Vector(0.0f, 0.0f));

Ici l'exemple peut paraitre peu pertinent, mais dans de nombreuse circonstance tu bénis ce genre de possibilité :D

- Les expressions Lambda : Une autre feature qui si ma mémoire est bonne est dans le C++ maintenant.
Exemple :

MonObjectAvecIdentifiant o = monTableauObject.Where(x => x.Id == 1);

Ce qui en français veut dire que dans un tableau tu va aller chercher l'objet qui à la propriété Id strictement égale à 1.
Super pratique.

- Linq : The feature du 3.5 qui est une surcouche des lambdas au final.

En linq mon exemple du dessus ça donne ça :
MonObjectAvecIdentifiant o = (from o in monTableauObject where o.Id == 1 select o).First();
En gros requétage de liste object en simili Sql, par contre un peu gourmant en perf

Voilà pour les features principales du 3.5.

Pour le 4.0 moins de chose mais :
- Optimisation des performances mémoire avec une nouvelle Common Language Runtime
- Possibilité d'utiliser la programmation parallèle (et ça ça tue)

Pour le 4.5 c'est comme le 4.0 mais en encore plus performant.

Bref je penses qu'il y a vraiment un intérêt à débloquer tout ça.
Au niveau implication normalement pas d'impact (surtout que le Binding c'est de l'interopérabilité), mais comme tout il faut tester pour s'en assurer ;)

L'auteur du template c'est toi, donc tu peux bien sûr mettre ton nom ;)

;p ça marche je vais continuer ça dans mon coin et pointer le bout de mon nez quand ça aura plus avancé !

A++
RadicalEd
« Modifié: Juillet 05, 2013, 08:46:21 pm par RadicalEd »

RadicalEd

  • Newbie
  • *
  • Messages: 16
    • Voir le profil
Re : Template VSIX pour la SFML.Net 2.0
« Réponse #3 le: Juillet 08, 2013, 03:32:49 pm »
Bonjour à tous

Le template est bien avancé !

Au programme plusieurs modifications :

- Abandon du plugin "Export Wizard Template" et passage du projet de template sous Visual Studio SDK.
- Deux types de projets, un type programme, un type bibliothèque de classes
- Un type d’élément, la classe SFML (simple classe avec les using intégrités, en gros une feature pour feignant :D)
- Création d'une catégorie SFML dans l'arborescence des projets et items. C'est plus propre ;)
- Les projets on été renommé en 2.0 pour spécifié la version SFML utilisé dans le template.

Quelques screens :

Les deux projets dans la catégorie SFML


La classe custom


Code de la classe custom



Voilà, pour ce VSIX c'est uniquement Visual Studio 2010. Faudra que j'édit pour qu'il puisse marcher sur 2012.
Sinon, je peux éventuellement inclure deux templates pour la Version 1.6, mais le binding n'est plus dispo sur le site et je n'ai plus le code source de cette version.
Autre point, les libs SFML.Net sont toujours en .Net 4.0 et AnyCPU.

Pour finir je peux pousser l'extension sur la galerie Visual Studio ! (j'attend quand même la réponse de Laurent si il est d'accord ou pas).

Hésitez pas à faire des remarques.

A++
RadicalEd
« Modifié: Juillet 17, 2013, 11:48:21 am par RadicalEd »

Hiura

  • SFML Team
  • Hero Member
  • *****
  • Messages: 4321
    • Voir le profil
    • E-mail
Re : Template VSIX pour la SFML.Net 2.0
« Réponse #4 le: Juillet 08, 2013, 03:54:50 pm »
J'utilise pas VS mais ça a l'air pas mal du tout!  :D
SFML / OS X developer

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Template VSIX pour la SFML.Net 2.0
« Réponse #5 le: Juillet 08, 2013, 04:52:34 pm »
J'aurais encore une question : tu me dis que .Net 4 apporte plein de fonctionnalités, mais si le code du binding ne les utilise pas on s'en fiche non ? Et est-ce que quelqu'un qui utilise encore .Net 2 ou 3 pourra utiliser SFML.Net qui est en .Net 4 (c'est surtout ça ma question) ?

Sinon une remarque : je me question sur la pertinence du modèle de classe. Là tu inclues tout SFML et plein d'autres trucs, la plupart du temps les gens n'auront pas besoin de ça. Et à part les inclusions, le reste est vide.

Sinon très beau boulot, ça m'a l'air bien propre. Tu pourras bien évidemment mettre ça en ligne lorsque ce sera finalisé :)
Laurent Gomila - SFML developer

RadicalEd

  • Newbie
  • *
  • Messages: 16
    • Voir le profil
Re : Template VSIX pour la SFML.Net 2.0
« Réponse #6 le: Juillet 08, 2013, 05:29:14 pm »
J'aurais encore une question : tu me dis que .Net 4 apporte plein de fonctionnalités, mais si le code du binding ne les utilise pas on s'en fiche non ? Et est-ce que quelqu'un qui utilise encore .Net 2 ou 3 pourra utiliser SFML.Net qui est en .Net 4 (c'est surtout ça ma question) ?

Soyons honnête tu as raison. Etant donné que c'est que du Binding on s'en fout un peu.
Sinon pour ta question c'est compatibilité descendante. Donc une personne qui dév une app en 4.0 pourra utiliser la lib en 2.0 mais pas l'inverse.

Bon, je propose de garder le .Net 2.0 sur le binding pour rester en accord avec les release sur le site.
Pour le projet du template je conseil tout de même de garder la version 4.0.
Après il est possible d'inclure dans le template le support des trois versions majeurs 2.0, 3.5, 4.0 et de laisser l'utilisateur choisir au démarrage du projet. Cela va me faire pas mal de boulot en plus mais bon ça peut valoir le coup :) (et comme ça pas d'histoire ;) )


Sinon une remarque : je me question sur la pertinence du modèle de classe. Là tu inclues tout SFML et plein d'autres trucs, la plupart du temps les gens n'auront pas besoin de ça. Et à part les inclusions, le reste est vide.

Ahahahah !
Oui en effet c'est pas terrible, disons que j'ai mis ça en place pour montrer qu'on peut faire se genre de truc assez facilement. Au final c'est l'équivalent du template de Class de base.
Après franchement à moins que tu pense à un cas précis d'item projet je ne compte pas conserver cette feature dans le template final ;)

Sinon très beau boulot, ça m'a l'air bien propre. Tu pourras bien évidemment mettre ça en ligne lorsque ce sera finalisé :)

Donc pour que je fasse une release final du template je te propose ça :
- Binding en 2.0 AnyCPU.
- Suppression de la feature Item qui sert à rien ^^

Pour la partie adaptation au .Net Framework, je vais me pencher sur le cas voir si je trouve une solution rapide.

A++
RadicalEd

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Template VSIX pour la SFML.Net 2.0
« Réponse #7 le: Juillet 08, 2013, 05:37:26 pm »
Ca me va :)
Laurent Gomila - SFML developer

RadicalEd

  • Newbie
  • *
  • Messages: 16
    • Voir le profil
Re : Template VSIX pour la SFML.Net 2.0
« Réponse #8 le: Juillet 10, 2013, 10:39:21 am »
Bonjour à tous !

Bon je suis en plein combat avec l'uploader de la gallery VS.



En cause le fait que j'ai fabriqué deux modèles de templates séparément et que j'ai fait un lien direct dans le manifest du VSIX.
En installation cela ne pose pas de problème mais le validateur du site de dépôt refuse ce genre de build.
C'est une anomalie côté MS, il y a une demande qui a été ouverte pour ne plus lever l'erreur, mais bon c'est un ticket non prioritaire car pour inclure plusieurs templates, ça passe si on fabrique un seul modèle pour les deux.

Bref j'ai testé l'upload avec le VSIX contenant uniquement le template SFML game project et il est valide.
Soit je pousse en l'état, soit il me faut refaire les deux templates dans un seul modèle (un peu chiant lol).

Je vais voir...

RadicalEd

  • Newbie
  • *
  • Messages: 16
    • Voir le profil
Re : Template VSIX pour la SFML.Net 2.0
« Réponse #9 le: Juillet 17, 2013, 11:47:45 am »
Me revoilà !

Bon après pas mal d'essai je n'ai pas réussi à faire le VSIX qui contient les deux project template.

Du coup j'ai tout de même pousser sur la Visual Studio Gallery l'extension afin que des gens puissent tester et me faire des retours :).

De toute façon le template n'est pas figé, j'aurai surement l'occasion de retravailler dessus car je compte migrer mon moteur 2D actuellement sur XNA vers la SFML ;)

Voici le lien :
http://visualstudiogallery.msdn.microsoft.com/856f52bc-b4a7-4a9d-a235-620565ccac32

Il est possible de l'installer directement dans Visual Studio via :
-> Outils -> Extensions et mises à jour -> Onglet en ligne -> Rechercher SFML dans la galerie VS

Petit screen à l'appuie :



Le VSIX est compatible :
- VS 2010 toutes éditions
- VS 2012 Ultimate, Premium, Pro, Windows Desktop Express (inutile d'assurer la comptabilité avec les autres express ^^)

Voilà j’espère que ça sera utile, je me suis bien amusé à fabriquer ce template.
Je manquerais pas de le mettre à jour en fonction des retours qu'on me fera ;)

A++
RadicalEd

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Template VSIX pour la SFML.Net 2.0
« Réponse #10 le: Juillet 17, 2013, 02:29:01 pm »
La classe :D

Je vais l'annoncer sur le forum anglais, ou bien tu veux le faire toi-même ?
Laurent Gomila - SFML developer

RadicalEd

  • Newbie
  • *
  • Messages: 16
    • Voir le profil
Re : Template VSIX pour la SFML.Net 2.0
« Réponse #11 le: Juillet 17, 2013, 02:47:22 pm »
Fait toi plaisir ^^

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Template VSIX pour la SFML.Net 2.0
« Réponse #12 le: Juillet 17, 2013, 03:41:08 pm »
Citer
Only thing is that the folder Libraries is spelled "Librairies"

 :P
Laurent Gomila - SFML developer

RadicalEd

  • Newbie
  • *
  • Messages: 16
    • Voir le profil
Re : Template VSIX pour la SFML.Net 2.0
« Réponse #13 le: Juillet 17, 2013, 03:53:32 pm »
lol

RadicalEd

  • Newbie
  • *
  • Messages: 16
    • Voir le profil
Re : Template VSIX pour la SFML.Net 2.0
« Réponse #14 le: Juillet 17, 2013, 06:05:44 pm »
Comme dit sur le forum anglais, upade made !

- Nom du rép modifié
- Plus de problème avec le nom du projet par défaut.

Par contre j'ai perdu la compatibilité avec VS 2012 car celui ci ne prend pas en considération le DefaultProjectName.
En gros il est mis par défaut sur SFMLGame avec un incrémente en fin de nom, sauf que sur VS 2012 ça marche pas, il donne le nom du fichier projet contenu dans le template, à savoir SFML.Net ...
De plus la génération du fichier project fait sauter une balise de build, ce qui fait que le template devient uniquement compatible en x86...

Je n'ai hélas que VS2010 au taf pour builder le template, il faut que je vois ça chez moi sous VS2012 pour rétablir la compatibilité.

:(