[DirectX] DirectX 9.0c Nouveau FrameWork

Le côté programmation du développement d'un jeu vidéo.

DirectX 9.0c Nouveau FrameWork

Messagepar GothikSoft » 28 Avr 2005, 14:15

Depuis la version Fevrier et Avril 2005 Microsoft a completement changer son frame work. Fini les InitDeviceObject, les FrameMove, Render et autre final Cleanup.

Le nouveau FrameWork de Directx nous simplifie encore plus le developpement. En effet la creation du device et de la fenetre est maintenant plus simple (un appel de fonction). Une nouvelle methode selection IME est arrive et le GUI a ete mis a jour et encore plein de nouvelle fonction...

Le seul desavantage est qu'on ne peut creer qu'1 fenetre et qu'1 device avec ce FrameWork.

Petit apercu :
Code: Tout sélectionner
INT WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, INT )
{
    // Set the callback functions. These functions allow the sample framework
    // to notify the application about device changes, user input, and window
    // messages. The callback functions are optional, so you need only set
    // them for events you are interested in.
    DXUTSetCallbackDeviceCreated( OnCreateDevice );
    DXUTSetCallbackDeviceReset( OnResetDevice );
    DXUTSetCallbackDeviceLost( OnLostDevice );
    DXUTSetCallbackDeviceDestroyed( OnDestroyDevice );

    DXUTSetCallbackFrameRender( OnFrameRender );
    DXUTSetCallbackFrameMove( OnFrameMove );

    // Initialize the sample framework and create the desired Win32 window and
    // Direct3D device for the application. Calling each of these functions is
    // optional, but they allow you to set several options which control the
    // behavior of the framework.
    DXUTInit( TRUE, TRUE, TRUE );
    DXUTCreateWindow( L"BasicHLSL" );
    DXUTCreateDevice( D3DADAPTER_DEFAULT, TRUE, 640, 480 );

    // Pass control to the sample framework for handling the message pump and
    // dispatching render calls. The framework will call your OnFrameMove and
    // OnFrameRender callback functions when there is idle time between
    // handling window messages.
    DXUTMainLoop();

    return DXUTGetExitCode();
}
Avatar de l’utilisateur
GothikSoft
Hello World, I'm new !
 
Messages: 82
Inscription: 24 Avr 2005, 13:04

Messagepar Lenolian » 28 Avr 2005, 16:46

Ca commence pas mal à ressembler au framework .Net qui est d'un simplicité effarente :)
Avatar de l’utilisateur
Lenolian
Hello World, I'm new !
 
Messages: 799
Inscription: 10 Avr 2005, 16:17
Localisation: Toulouse

Messagepar GothikSoft » 28 Avr 2005, 19:24

J'ai teste ce Frame Work en entier et je peux vous dire que c'est un regal a programmer. Vous pouvez jeter a la poubelle l'ancien FrameWork qui maintenant n'as plus reson d'être. D'ailleur il n'est meme pas fournis avec les nouveaux sdk.
Microsoft a fais du bon boulot !
Pour ceux qui aurait des petits problemes avec ce frame work vous pouvez poster vos questions ici.
Avatar de l’utilisateur
GothikSoft
Hello World, I'm new !
 
Messages: 82
Inscription: 24 Avr 2005, 13:04

Messagepar oxyde » 30 Avr 2005, 00:45

looooool on dirait trop de l'opengl avec glut sa abusé !
oxyde
Hello World, I'm new !
 
Messages: 10
Inscription: 28 Avr 2005, 19:18

Messagepar Mickael » 30 Avr 2005, 19:20

Je trouve que c'est beaucoup plus imple,moins de ligne,plus comprehensible :p
GG Microsoft cette fois :p
Mickael
Avatar de l’utilisateur
Mickael
Hello World, I'm new !
 
Messages: 140
Inscription: 17 Avr 2005, 11:51

Messagepar LaurentUSA » 04 Mai 2005, 03:53

Le nouveau framework est sorti fin Juillet 2004.

Il est strictement equivalent a l'ancien du point de vue de la gestion du LostDevice et la gestion de l'animation. Que l'on enregistre un callback ou qu'on surcharge une methode virtuelle, au bout du compte, on se retrouve avec les memes choses a faire...

Les methodes d'init et de de-init sont passees a la trappe et la de-init DirectX se fait dans le CRT, ce qui ne simplifie pas les choses du tout.

Les vrais points positifs du nouveau framework sont :

- le passage complet en Unicode.
- le code pour la gestion d'une interface utilisateur native.
- une classe D3DXFont qui est enfin correcte.

C'est d'ailleurs pour cela que SxDL 3 utilise desormais le nouveau framework.

Ne surtout pas jeter l'ancien framework a la poubelle ! Les utilitaires DirectMusic, DirectInput et pas mal d'autres sont encore et toujours utiles. La demarche intelligente consiste evidement a fusionner les deux. ( Comme dans SxDL ;) )
Avatar de l’utilisateur
LaurentUSA
Hello World, I'm new !
 
Messages: 186
Inscription: 10 Avr 2005, 12:00

Messagepar blu3dr4g0n » 04 Mai 2005, 09:00

en tout cas, ce framework est bien plus simple que celui que j'ai pu voir avec DX8 dans mon bouquin (ou en tout cas je le trouve plus lisible).

Si ils font comme ça pour tout, je crois que je vais coder bientôt 100% crosoft :) lol

D'ailleur j'ai une question concernant .NET : qu'est ce que c'est ce machin de 11megas qui s'installe ? le C#, quel est le principe de ce langage ? plus ou moins rapide que le C++ ?

Utiliser du C# pour des applications client/serveur temps réel est-il concevable ? pour des applications de type console ? pour des jeux ?

L'environnement microsoft est pour moi un mystère, mais je m'y interesse de plus en plus (ben ouais, travail oblige)
La connaissance est le pouvoir, sachez l'utiliser !
Avatar de l’utilisateur
blu3dr4g0n
Hello World, I'm new !
 
Messages: 313
Inscription: 30 Mar 2005, 12:00
Localisation: Castres

Messagepar Lenolian » 04 Mai 2005, 09:45

Code: Tout sélectionner
D'ailleur j'ai une question concernant .NET : qu'est ce que c'est ce machin de 11megas qui s'installe ?


C'est la machine virtuelle .Net et les assemblys (dll) standards.

Code: Tout sélectionner
le C#, quel est le principe de ce langage ?


C'est très proche du C++, la plus grosse différence vient que c'est entièrement objet, tout dérive de la classe Object (même les int,float...). Point de vue codage cela reprend la syntaxe du C++ en la simplifiant énormément, plus de '::', '->' , on n'utilise plus que '.'. Pas de fichier d'en-tête à inclure, on fait juste une référence à l'assembly que l'on veut utiliser dans le projet et c'est tout.

Code: Tout sélectionner
plus ou moins rapide que le C++ ?


Le code C# (et tout code managé d'ailleurs) est compilé deux fois. La première fois il est traduit en langage intermédiaire et produit un fichier de type .exe (ou.dll). Lors de l'execution de l'exe, le code est compilé en temps réel ncode natif. C'est tellement bien fait que l'on ne voit quasiment pas la différence de perfs même sur un jeu.
On peut aussi lors du déploiement de l'installation choisir de compiler le programme directement en natif une fois pour toute, cela evite l'utilisation du compilateur just in time.

Avec le C# on code plus vite et plus sûr pour le même résultat, alors pourquoi s'en priver. A noter que le framework .Net est fourni avec une bibliothèque de functions énorme (Xml, thread, web, winforms, gdi, reflection, flux, et même accès direct au compilateur pour faire de la compilation à la volée...) et de plus les outils sont gratuits (compilo, débugueurs, profiler).

Le principal défaut est la nécessité d'installer la machine virtuelle, enfin si on peut parler de défaut.

PS: je vais peut-être faire une page sur le wiki pour expliquer plus en détail les spécificités du langage, on en parle pas beaucoup ici :)

PS2 : Autre gros avantage, on ne perd pas le code que l'on avait écrit en C++ natif, puisque l'on peut appeler du code natif à partir du code managé.
Avatar de l’utilisateur
Lenolian
Hello World, I'm new !
 
Messages: 799
Inscription: 10 Avr 2005, 16:17
Localisation: Toulouse

Messagepar blu3dr4g0n » 04 Mai 2005, 14:39

hmmm ça a l'air interessant tout ça, vais m'y pencher serieusement dessus. d'ailleur j'ai entendu dire qu'un gars connu avant sortit un IDE/Compilateur C# pour linux, et que .NET était en portage pour linux... interessant n'est ce pas ? :D

Bon ben vais m'atteler à tout ça, si c'est un mix entre C++ et java, ça doit valoir le coup, et vu comment tu l'expliques sans dire 'c'est bien' 'c'est pas bien', ça donne envie d'acheter un bouquin pour apprendre ^_^

Par contre .NET dispose de frameworks pour les jeux ou autre ? (à part SxDL bien sûr) je pensais à OGL, FMOD, etc... sans passer par directx.

===<edit<===

j'ai trouvé un article sur comment programmer OGL avec C#, ça s'appelle CsGL et c'est ici pour l'article et ici pour CsGL m'enfin, ça a pas l'air de valoir le SxDL fait par Laurent, même si celui de laurent est pour l'instant dédié à directX :D (portage en cours)

sinon pour un framework de jeux cross plateforme j'ai trouvé aussi realmforge GDK

ah oui, et voici un jeu commercial developpé en C# et... openGL :D (à part directsound pour le son), voir sur le board du jeu
La connaissance est le pouvoir, sachez l'utiliser !
Avatar de l’utilisateur
blu3dr4g0n
Hello World, I'm new !
 
Messages: 313
Inscription: 30 Mar 2005, 12:00
Localisation: Castres

Messagepar Lenolian » 04 Mai 2005, 15:17

J'ai commencé à documenter le wiki sur .Net et le C# mais bon y a encore beaucoup de vide :)

Sinon SxDL sur C# c'est pour bientôt enfin j'espère :) j'ai plus que un ou deux petits problèmes avant de faire la première démo...

Code: Tout sélectionner
Par contre .NET dispose de frameworks pour les jeux ou autre ?


C'est sûr que pour l'instant .Net étant presque essentiellement supporté que par Windows, seul DirectX est mûr. L'avantage c'est que la prog DirectX c'est beaucoup simplifié (plus de COM...).
Il y a Axiom qui est un moteur basé sur Ogre (et qui est même plus performant). Il y a aussi le TAO framework qui a porté les librairies les plus courantes sur .Net (OpenGl, OpenAL, FMOD, DevIL...).

Code: Tout sélectionner
que .NET était en portage pour linux


Le projet Mono est très interressant, il va moins vite que Microsoft mais ils font un boulot énorme. On peut même carrément intégrer le compilateur dans son application et le commander à partir de fonctions C pour compiler à la volée du code...

A tiens j'avais presque oublié de parler de l'interopérabilité des langages. .Net ce n'est pas un langage : il y a les classiques C++, Visual Basic , C# , J# (Java) et les plus exotiques Cobol, Perl, F#(CAML), Python, Lisp... et tout ces langages peuvent travailler ensemble. Ecrire une classe en Basic, l'héritée en J# et l'utiliser dans un prog C++ : c'est possible.

On peut même programmer en assembleur x86 :) mais bon faut être maso quand même... x86 .Net
Avatar de l’utilisateur
Lenolian
Hello World, I'm new !
 
Messages: 799
Inscription: 10 Avr 2005, 16:17
Localisation: Toulouse

Messagepar HanLee » 04 Mai 2005, 15:54

Est-ce que ce serait simple en C# de faire un programme qui se modifierait soi-même ?

J'avais lu une fois LaurentUSA qui disait qu'en C# c'était hyper facile de générer du code à la volée, est-ce que c'est bien ce qu'il voulait dire ?
Avatar de l’utilisateur
HanLee
Hello World, I'm new !
 
Messages: 253
Inscription: 10 Avr 2005, 01:34

Messagepar Lenolian » 04 Mai 2005, 16:05

Je sais pas si c'est possible qu'il se modifie lui-même, mais il doit pouvoir modifier une dll qu'il utilise.

Pour compiler à la volée ce fichier :

Code: Tout sélectionner
using System;
using System.Windows.Forms;

class Script
{
   public static void Main()
   {
      MessageBox.Show( "This is a script!" );
   }
}


Il suffit de faire :

Code: Tout sélectionner
// références
using Microsoft.CSharp;
using System.CodeDom;
using System.CodeDom.Compiler;

// Objets nécessaires pour la compilation
CSharpCodeProvider codeProvider = new CSharpCodeProvider();
ICodeCompiler   codeCompiler = codeProvider->CreateCompiler();

// paramêtre du compilateur
CompilerParameters params = new CompilerParameters();
params.GenerateExecutable = false;
params.GenerateInMemory = true;
params.IncludeDebugInformation = false;
params.TreatWarningsAsErrors = false;
params.ReferencedAssemblies.Add( "System.dll" );
params.ReferencedAssemblies.Add( "System.Windows.Forms.dll" );

// compile un fichier
CompilerResults   results = codeCompiler.CompileAssemblyFromFile( params, "MyScript.cs" );

// utilise le résultat de la compilation
results.CompiledAssembly.GetType( "Script").GetMethod( "Main" ).Invoke( null, null );


Après on peut imaginer que l'éxécutable génère lui-même les scripts et les utilise après compilation. Ca peut donner des choses très interressantes.
Avatar de l’utilisateur
Lenolian
Hello World, I'm new !
 
Messages: 799
Inscription: 10 Avr 2005, 16:17
Localisation: Toulouse

Messagepar HanLee » 04 Mai 2005, 16:20

C'est trop bien alors :)

C'est que j'aimerais faire moi, comme ça un jour tu crées un petit squelette de programme suffisamment légèrement autonome et évolutif. Le programme apprend de lui même, il se créera des nouvelles fonctions parce qu'il s'adapte à son environnement, et il apprend de nouvelles choses parce que j'lui aurais appris des choses [où parce que j'lui aurai montré des exemples... mais là faudrait apprendre au programme comment remarquer, déchiffrer des trucs inconnus qui pourtant recèlent une certaine logique, c'est plus dur].
Bah faudrait lui intégrer des axiomes quand même, lui donner des connaissances de bases...
Avatar de l’utilisateur
HanLee
Hello World, I'm new !
 
Messages: 253
Inscription: 10 Avr 2005, 01:34

Messagepar Mokona » 04 Mai 2005, 18:04

Ceci dit, juste pour culture, ce genre de chose "trop bien" n'est pas nouveau en informatique. Ce fut l'une des caractéristiques remarquées (parmi bien d'autres) de Lisp.
Mokona
Hello World, I'm new !
 
Messages: 1686
Inscription: 13 Mar 2005, 13:00

Messagepar Lenolian » 04 Mai 2005, 18:28

En fait pour dire vrai, il n'y a rien de vraiment nouveau dans le framework .net. Ce qui est interressant c'est la conjonction de toutes ces petites choses en un seul ensemble et la facilité de mise en oeuvre.
Avatar de l’utilisateur
Lenolian
Hello World, I'm new !
 
Messages: 799
Inscription: 10 Avr 2005, 16:17
Localisation: Toulouse

Messagepar LaurentUSA » 05 Mai 2005, 04:00

La generation dynamique de code est une realite quotidienne dans dot net.

Lors des trois dernieres annees de mon dernier boulot, environ 60% du code de nos applications etait genere a la volee en utilisant l'introspection ( System.Reflection ), la decouverte dynamique de schema de bases de donnees et l'analyse de schema de comportements dessines avec Microsoft Visio.

J'ai ete recement recrute par une grosse boite de la region pour realiser le meme genre de travail pour une application qui devrait concerner environ 60 millions d'utilisateurs.

Les gains :

Developpement accelere.
Budget reduit.
Meilleure qualite.
Securite accrue.
Automation des tests.
Automation des benchs.

Plus interressant a concevoir et coder, mais quand meme un "poil" plus complique donc blaireaux s'abstenir... :)

En ce qui concerne plus particulierement les jeux :

- Scripting
- FSM
- Intelligence Artificielle et apprentissage

sont les domaines de predilection de cette technique.
Avatar de l’utilisateur
LaurentUSA
Hello World, I'm new !
 
Messages: 186
Inscription: 10 Avr 2005, 12:00

Messagepar HanLee » 08 Mai 2005, 20:49

Dans managed C++ c'est possible aussi alors?
Avatar de l’utilisateur
HanLee
Hello World, I'm new !
 
Messages: 253
Inscription: 10 Avr 2005, 01:34

Messagepar Thanos » 10 Mai 2005, 01:47

Lenolian a écrit:l'interopérabilité des langages. .Net ce n'est pas un langage : il y a les classiques C++, Visual Basic , C# , J# (Java) et les plus exotiques Cobol, Perl, F#(CAML), Python, Lisp... et tout ces langages peuvent travailler ensemble. Ecrire une classe en Basic, l'héritée en J# et l'utiliser dans un prog C++ : c'est possible.


Ouais c'est possible mais il faut quand meme respecter certaine regles (CLR) pour que l'interoperabilité soit assuré.

Ouais moi aussi, j'aime beaucoup .Net, d'ailleurs je vais bientot recevoir la beta 2 2005, j'ai hate.
Avatar de l’utilisateur
Thanos
Hello World, I'm new !
 
Messages: 187
Inscription: 11 Avr 2005, 10:22

Messagepar blu3dr4g0n » 10 Mai 2005, 13:13

moi je viens de la telecharger et de l'installer, on va voir :D en tout cas l'interface et l'aide change vraimment de VC++ 6 !!!! elle est vraimment mieux penser ! vais me faire quelques tutos pour bien la maitriser
La connaissance est le pouvoir, sachez l'utiliser !
Avatar de l’utilisateur
blu3dr4g0n
Hello World, I'm new !
 
Messages: 313
Inscription: 30 Mar 2005, 12:00
Localisation: Castres

Messagepar eldoctor.S » 13 Mar 2007, 19:06

Lenolian a écrit:On peut aussi lors du déploiement de l'installation choisir de compiler le programme directement en natif une fois pour toute, cela evite l'utilisation du compilateur just in time.

J'en profite : comment réalise-t'on ça?
eldoctor.S
Hello World, I'm new !
 
Messages: 2
Inscription: 13 Mar 2007, 19:03

Messagepar Lenolian » 13 Mar 2007, 21:30

joli revival ^^

Pour ce qui est de compiler le programme en natif lors de l'installation il faut utiliser l'outil Ngen.exe qui doit être fourni avec le SDK 2.0 ( http://msdn2.microsoft.com/fr-fr/library/6t9t5wcf(VS.80).aspx ).

Maintenant en ce qui concerne l'utilité de la manip, je peut pas trop dire. avec le framework 1.1, c'était à éviter le plus possible. Je sais qu'avec le framework 2.0 il a été amélioré (en prenant en compte des optimisations de compilation) mais j'ai pas vraiment testé.
J'ai toujours raison, même quand j'ai tort car alors j'ai raison d'avoir tort.
Avatar de l’utilisateur
Lenolian
Hello World, I'm new !
 
Messages: 799
Inscription: 10 Avr 2005, 16:17
Localisation: Toulouse

Messagepar auron1 » 13 Mar 2007, 22:26

Bonjour à tous.
J'ai un problème mon bout de code. J'utilise justement le nouveau framework, en ne codant rien, j'arrive à compiler et à faire apparaitre une fenêtre vide. Mais, lorsque je déclare un objet de type "CDXUTDialogRessourceManager", la compilation du ".cpp" fonctionne mais, il y a une erreur du type LNK2019 avec "lien externe non résolu". Pourtant la class est implémentée dans un des fichiers du dossier "Common" et lors de la compilation visual c++ commence par ce type de fichier et réussit. L'édition de liens pêche mais je ne sais pas pourquoi. Quelqu'un peut il m'aider?
Merci.
auron1
Hello World, I'm new !
 
Messages: 4
Inscription: 10 Déc 2006, 14:02

Messagepar eldoctor.S » 14 Mar 2007, 10:15

Lenolian a écrit:joli revival ^^

N'est-ce pas? ;)

Merci pour le lien... Comme je le craignais, ça ne permet pas de distribuer directement du code natif : juste une optimisation... Dommage... ;)
eldoctor.S
Hello World, I'm new !
 
Messages: 2
Inscription: 13 Mar 2007, 19:03


Retourner vers Programmation

Qui est en ligne

Utilisateurs parcourant ce forum: Bing [Bot] et 32 invités

cron