Silverlight 5 3D

15. avril 2011

Vous l’aurez compris, il s’agit pour moi de la meilleure fonctionnalité de Silverlight 5 Smile et je risque d’en parler plus d’une fois sur ce blog.

Je vous rappelle d’ailleurs que vous pouvez voir un exemple de moteur 3D que j’ai écris pour Silverlight 5 juste ici.

image

 

De plus, si vous avez raté la session “Silverlight 5 3D” du Mix, voici pour vous une chance de la revoir sur le site du Mix. Durant cette session, Aaron Oneal (le program manager de Silverlight 3D) revient de sa voix suave sur les concepts de base applicables à Silverlight 3D et présente également le fonctionnement général de ce dernier. A noter la présence de mon petit moteur 3D en début de session Smile.

Mix2011, Silverlight ,

What about Silverlight 5 ?

13. avril 2011

Le second keynote vient de se terminer et ce fut un grand moment. Un des meilleurs keynotes que j’ai été appelé à suivre.

Je ne reviendrai pas sur la partie Windows Phone 7 et sa nouvelle mise à jour (nom de code Mango) qui est brillamment couverte par Pierre Cauchois.

La partie qui m’intéresse ici est bien évidemment l’annonce de Silverlight 5 et de ses nouveautés (Le SDK est en plus déjà disponible ici!)

Support de la 3D accélérée

Parmi ces dernières, celle qui me fait le plus plaisir est bien sûr l’intégration de la 3D accélérée basée sur l’API XNA. J’ai d’ailleurs eu l’insigne honneur de réaliser une des démos qui a été montré au keynote par John Papa (ca fait tout chose de voir sa démo sur un événement de cette importance, d’autant plus qu’elle sera réutilisée lors de la session sur Silverlight 3D par Aaron Oneal).

image

Vous pouvez la retrouver en live ici (Il faudra bien sûr installer Silverlight 5).

La 3D dans Silverlight est donc basée sur l’API XNA avec le support des shaders 2.0 (et sans doute des 3.0 en mode out of browser). C’est ceci dit une version allégée avec notamment l’absence de la classe Effect, ce qui implique la compilation offline des shaders pour embarquer le code binaire. De même, il n’y a pas e support du DDS et si vous voulez décoder des images (JPG, PNG) pour générer des textures, vous devrez le faire à la main (pas de Texture.FromStream en gros). L’idée derrière ces restrictions est de fournir une API légère et surtout de la sortir dans les temps.

Pour le reste c’est du bonheur avec un alignement quasi-militaire avec XNA 4.0 notamment en ce qui concerne la gestion des états (states). Si vous connaissez le développement en XNA vous n’aurez donc aucun problème pour faire du Silverlight 3D.

XAML binding debugging

Une autre fonctionnalité vraiment excellente est la possibilité dans Visual Studio 2010 de pouvoir mettre un breakpoint au niveau d’un binding dans le XAML. Cela va vraiment être utile et va apporter un vrai gain de productivité car le binding est assez obscur au niveau de ses erreurs.

Ancestor RelativeSource + DataContextChanged

Comme son grand frère WPF, Silverlight 5 propose désormais un évènement lorsque l’on change le DataContext. De même, on peut désormais dans un binding indiquer que l’on souhaite se brancher sur un contrôle ancestre via le RelativeSource de type Ancestor.

PivotViewer Control

Le PivotViewer qui au préalable était un contrôle autonome est maintenant directement intégré dans le SDK.

Implicit data templates

Afin de faciliter la mise en place de thèmes, il sera désormais possible de définir des Data Templates qui affecteront par défaut un type de contrôles (comme en WPF) sans avoir besoin de faire une  référence avec un StaticResource.

Inter-Layout Transitions

Grâce à ce mécanisme, il est possible d’appliquer des animations  quand des éléments sont ajoutés, supprimés ou réorganiser au sein d’un layout. L’idée est vraiment de se rapprocher de ce que l’on peut voir avec Metro sur WP7 ou il existe de nombreuses petites animations qui donnent une belle expérience utilisateur de fluidité.

Background thread for networking

Une bonne réduction de la latence réseau va être mise en œuvre en utilisant un thread en tâche de fond pour gérer le réseau. Cela permettra de ne pas perturber le thread de rendu et donc de garder (encore une fois) une interface fluide.

Rendu direct sur le GPU

Toujours dans l’idée de faire un système fluide, il sera possible de faire directement des rendus 2D sur le GPU (à la mode DirectDraw/DirectWrite). C’est ce que l’on appelle un mode immédiat (lorsque l’on pilote directement le dessin sur le GPU).

Multi-click support

Amusant, mais il aura fallu attendre la version 5 de Silverlight pour pouvoir gérer le double (ou plus) clic sur la souris Smile.

Binding dans les styles

Autre notion importante pour définir de belles UI, il sera désormais possible de définir des Bindings au sein des styles (toujours comme en WPF).

Impression vectorisée

Silverlight 5 pourra imprimer en utilisant le Postscript vectorisé pour obtenir une qualité parfaite (avec même la possibilité de faire un aperçu avant impression virtuel).

Media Hardware decode and TrickPlay

Silverlight saura utiliser le GPU pour décoder les vidéos(H264) et pourra faire du trick-playing (à savoir accélérer ou ralentir la vitesse de lecture des médias).

SoundEffect

Cette nouvelle classe permet de charger un stream contenant un son (sans doute au format WAV) et de le jouer sans avoir à instancier un MediaElement. Très utile pour jouer des sons rapidement (genre lorsque l’on clique sur un bouton…)

Pixel snapping

Le support de l’alignement des pixels permettra (comme en WPF) d’avoir une meilleure lisibilité des fontes à l’écran.

Possibilité de créer des fenêtre autonomes (Multiple windows)

En mode Out of Browser, il sera possible de générer des fenêtres (top level) au sens système (OS) du terme. A ne pas confondre avec des ChildWindows.

En fait la classe System.Windows.Window est désormais instanciable.De plus, il n’y a plus de restriction sur le titre des fenêtres ou sur leur placement.

Performance (64 bits and faster application startup)

Le parser XAML a été optimisé pour permettre un lancement plus rapide des applications. De plus, le plugin Silverlight pourra dorénavant fonctionner en 64 bits nativement sur les systèmes 64 bits (alors que jusqu’alors c’était la version 32 bits qui s’exécutait même sur un OS 64 bits).

Mode Trusted App In-Browser

Il sera possible via un certificat et une validation par un administrateur de rendre les applications Silverlight 5 certifié en mode In-Browser. Ces applications auront accès au niveau maximal de sécurité tout en restant dans le navigateur.

Support grandement amélioré du P/Invoke et de l’interopérabilité.

Il sera possible (en mode trusted) de faire du P/Invoke de code natif comme dans le framework .NET (via l’attribut DllImport).Il faut toutefois faire attention avec ce genre de fonctionnalité car cela engagera fortement la portabilité de l’application (Elle ne fonctionnera plus que sur Windows et dans un contexte certifié qui plus est).

De plus il sera possible, toujours dans une application certifiée d’accéder à tout le système de fichier (et non pas uniquement ce qu’il y avait dans “Mes documents”)

Intégration du WebBrower même en mode In-Browser

En Silverlight 4, pour utiliser le WebBrowser il fallait être en mode Out Of Browser. En Silverlight 5, le WebBrowser fonctionnera même en mode In-Browser.

Et bien d’autres encore…

D’autres évolutions mineures sont également annoncées et je ne manquerai pas de revenir dessus dès que j’aurai de la visibilité sur le sujet.

Call to action!

On peut le voir, Silverlight 5 est une belle nouvelle version avec énormément d’améliorations. Je reviendrai plus en détail sur certaines de ces nouveautés dans le futur. Il ne vous reste plus maintenant qu’à installer le SDK et vous lancer à l’aventure!

Mix2011, Silverlight ,

NopControls 1.1.0

29. mars 2011

Je suis inarrêtable. Vivement que je reprenne le travail ^^. Donc, sinon, nouvelle version des NopControls pour Silverlight.

Cette nouvelle version intègre:

  • Un nouveau contrôle : le ColorPicker
  • Un nouveau projet de test pour Windows Phone (en supplément de celui pour Silverlight Desktop)
  • La correction de quelques vilains bugs qui faisaient rien que de m’embêter

 

imageimageimage

 

Le tout toujours disponible sur Codeplex : http://nopcontrols.codeplex.com

D’ailleurs sur le conseil d’une future collègue, je suis en train d’essayer de voir pour intégrer les NopControls dans les Coding4Fun controls (http://coding4fun.codeplex.com)…Affaire à suivre donc.

.Net, NopControls, Silverlight

NopControls

28. mars 2011

Je viens de mettre en ligne un nouveau projet Codeplex destiné à héberger mes contrôles Silverlight (pour Windows Phone et Desktop).

Le projet s’appelle NopControls et se trouve ici:

http://nopcontrols.codeplex.com

Le but est de fournir le code de quelques contrôles sympathiques que vous pouvez réutiliser dans vos projets si le cœur vous en dit.

Au programme pour le moment deux contrôles:

  • PolygonTabControl : Ce contrôle mappe ses enfants sur la face d’un volume à n faces. Par exemple si il a 5 enfants, il crée un pentagone extrudé et met chaque enfant sur une face.
  • ExpandableTab : Ce contrôle permet de créer des fiches qui se docke sur un bord et qui peuvent apparaitre lorsque l’on clique sur l’onglet qui les représente.

 

Pour en savoir plus, reportez vous au site Codeplex, il y a un exemple en Silverlight Sourire

.Net, Silverlight, Windows Phone

Vivez le keynote de la PDC avec Bewise

28. octobre 2010

Si vous ne savez pas quoi faire ce soir, je vous propose de venir avec moi voir la retranscription simultanée du keynote de la PDC dans les locaux de Microsoft à Toulouse.

Toute la team Bewise sera là et on pourra discuter ensemble de toutes les annonces qui ne manqueront pas de voir le jour.

Pour s’inscrire c’est par là:

http://www.facebook.com/event.php?eid=125098587545246&index=1

L’adresse :
Microsoft - 1 Rue Marie Curie - Parc Technologique du Canal - 31520 Ramonville St-Agne

Windows Phone, .Net, Windows Forms, Windows Mobile, WPF, Visual Studio, Silverlight, DirectX, Bewise

Synchroniser (ou pas) un appel à un web service avec Silverlight pour Windows Phone 7

26. septembre 2010

L’idée de base est la suivante: j’ai un web service à appeler mais je veux attendre le résultat. Hors en Silverlight pour WP7, tous les appels sont asynchrones et sont basés sur un pattern évènementiel:

private void LogToCollectoOnlineServices()
{
    UserServiceSoapClient userServiceSoapClient = new UserServiceSoapClient();

    userServiceSoapClient.GetStateCompleted += 
userServiceSoapClient_GetStateCompleted; userServiceSoapClient.GetStateAsync(Account.ID); } void userServiceSoapClient_GetStateCompleted(object sender,
GetStateCompletedEventArgs e) { }

Donc la, pas bête je me dis : mettons un ManualResetEvent :

private void LogToCollectoOnlineServices()
{
    using (ManualResetEvent evt = new ManualResetEvent(false))
    {
       UserServiceSoapClient userServiceSoapClient = new UserServiceSoapClient();

       userServiceSoapClient.GetStateCompleted += 
userServiceSoapClient_GetStateCompleted; userServiceSoapClient.GetStateAsync(Account.ID, evt); evt.WaitOne(); evt.Close(); } } void userServiceSoapClient_GetStateCompleted(object sender,
GetStateCompletedEventArgs e) { ((ManualResetEvent) e.UserState).Set(); }

Et paf, je vous le donne en mille, ca ne marche pas! En effet, ici le GetStateCompleted n’est jamais appelé.

L’explication est la suivante : Silverlight pour WP7 (comme Silverlight) passe par le thread de l’UI pour lancer ses requêtes réseaux. Or ici, avec mon evt.WaitOne(), je bloque le thread principal et donc ce dernier ne peut pas dispatcher les ordres réseaux et donc ma requête web ne part pas Triste.

Donc en conclusion, le pattern d’asynchronisme est à respecter à la lettre! Ici la solution passera par une gestion différente avec par exemple un évènement levé lorsque la requête a fini pour mettre à jour mon interface.

.Net, Silverlight, Windows Phone

Rajouter un événement sur le changement d’une DependencyProperty avec Silverlight pour Windows Phone 7

16. août 2010

La problématique est la suivante : J’ai une DependencyProperty dans une application Silverlight et cette dernière n’a pas d’événement lorsque sa valeur change.

Or, il faut que dans mon application je sois notifié sinon ca ne marchera pas.

Quel cruel dilemne! D’autant plus qu’en WPF je n’aurai aucun mal à faire cela puisque je pourrai directement me brancher dessus en tant qu’owner ou bien encore récupérer ses métadatas et rajouter un événement.

Mais sous Windows Phone 7, point de tout cela. Heureusement il existe (au moins) une solution (je dis au moins, car au bureau on veut me faire croire qu’il existerait d’autres solutions mais plus élégantes. Comme pour le moment ils n’ont rien trouvé, je publie la mienne:))

 

Nous allons tout simplement faire un binding entre la propriété que je veux surveiller et une DependencyProperty que je vais créer et ou je pourrais sans problème indiquer un événement. Ainsi quand ma propriété d’origine va changer, le binding va automatiquement changer ma propriété de surveillance qui me lèvera gentiment un événement.

En code cela donne donc ceci:

using System;
using System.Windows;
using System.Windows.Data;
using Microsoft.Phone.Controls;

namespace WindowsPhoneApplication1
{
    public class DependencyProperyWatcher<T> : DependencyObject
    {
        public event EventHandler ValueChanged;
        public static readonly DependencyProperty property = 
DependencyProperty.Register("Value", typeof(T),
typeof(DependencyProperyWatcher<T>), new PropertyMetadata(OnvalueChanged)); static void OnvalueChanged(DependencyObject d,
DependencyPropertyChangedEventArgs e) { ((DependencyProperyWatcher<T>) d).RaiseValueChanged(); } public DependencyProperyWatcher(DependencyObject d, string propName) { var bnd = new Binding(propName) { Source = d, Mode = BindingMode.OneWay }; BindingOperations.SetBinding(this, property, bnd); } void RaiseValueChanged() { if (ValueChanged != null) ValueChanged(this, EventArgs.Empty); } } public partial class MainPage : PhoneApplicationPage { // Constructor public MainPage() { InitializeComponent(); } public void test() { DependencyProperyWatcher<double> toto =
new DependencyProperyWatcher<double>(this, "Width"); } } }

 

Via ma variable toto, je peux avoir accès à un événement qui sera levé à chaque fois que la propriété Width de ma page changera !

Windows Phone, Silverlight, .Net ,

SilverCollecto

24. mars 2010

Mon célèbre gestionnaire de collections (mondialement reconnu dans mon bureau et sur le tapis de la salle de bain) sort dans une nouvelle version en Silverlight 4.0.

Au menu des animations, des projections, des jolies couleurs, des projections, de l’entity framework, des projections, du WCF RIA Services et des projections.

Quelques captures de la bête:

image image

image image

SilverCollecto gère:

  • Liste des collections sous forme de TreeView
  • PictureFlow pour les images associées aux items
  • WCF RIA Services pour la synchro avec SQL Server
  • Drag’n’Drop

Je mettrai bientôt en ligne les sources mais on peut déjà tester le tout ici : http://collecto.catuhe.com (je crée des comptes utilisateurs sur simple demande).

Reste encore des bugs et surtout rien n’est sécurisé mais ca ne devrait plus tarder…

Silverlight

BDC 2010 – C’est reparti!

4. mars 2010

A la demande générale, la Bewise Day Conference est de retour pour une 4ème édition ! Encore une fois, venez découvrir ce qui se fait de mieux dans les technologies Microsoft.

Cette année, beaucoup de nouveautés, puisque Microsoft lance la gamme 2010 de ses produits, notamment Visual Studio, Sharepoint, mais aussi la version 4.0 de son framework .Net, MVC 2, Azure, Silverlight 4 et bien d’autres choses bien croustillantes.

J’animerai les plénières cette année et je vous conseille d’y participer car vous y découvrirez le grand secret de Bewise :).

Pour les inscriptions, rendez-vous sur le site officiel de la BDC 2010.

Bewise, .Net, 3D, Silverlight, Visual Studio, Windows Forms, Windows Mobile, WPF

Preview de Nova 2009

14. janvier 2009

Pour le plaisir des yeux, je viens d’ouvrir une nouvelle section sur mon blog. Cette section nommée “Previews Nova” permettra d’avoir des previews de réalisations autour de Nova.

Cela se passe par ici.

Vous y trouverez une petite application silverlight (utilisant Deep Zoom) pour bien visualiser les images de previews (amusez vous à zoomer avec la molette de la souris).

On commence la série par une image issue d’une démo réalisée par mon ami mais néanmoins artiste Mitch. La démo en question utilise notre shader de métal et une nouvelle technique de représentation du verre (notamment sur les phares).

Silverlight, Nova