L'indispensable pour programmer avec SDL |
|
|
|
Cette annexe a pour but de vous donner les moyens techniques de programmer avec SDL sous Linux et Windows. Je vais détailler l'ensemble des outils et des modes d'installation de la librairie sur ces deux OS. Je ne traite pas de BeOS ou de MacOS, aussi si quelqu'un sait comment procéder qu'il m'envoie un mail, je serai heureux d'ajouter la procédure à cette page.La page principale de SDL : http://www.libsdl.org/ |
|
Linux |
|
|
|
Je commencerai par mon OS de prédilection, c'est-à-dire Linux :) SDL propose touhours 3 packages différents : la Binary, la Devel et les Sources. Si vous désirez simplement posséder la librairie sur votre OS pour l"exploiter dans des jeux proposés par Loki il vous suffit d'installer le package qui se présente toujours sous la forme : SDL-1.x.x-1.i386.rpm ou SDL-1.x.x-1.i386.tar.gz Très honnêtement je ne suis généralement pas un fan des fichiers type rpm, mais il faut avouer que ceux-ci dans le cas de SDL sont très bien faits et facilitent l'installation. Donc utilisez les de prférences ! Ce qui me paraît en revanche étrange c'est que les chemins d'accès à la lib sont différents que vous les placiez avec les tarballs ou les rpms. Je n'ai toujours pas saisi pourquoi :-/ Bien bien, vous pouvez maintenant utiliser des programmes fonctionnant sur SDL mais je pense que si vous lisez cette page c'est pour faire bien plus que l'utiliser de cette façon... Vous devez donc installer les packages restant, ie, SDL-devel-1.1.5-1.i386.rpm Une fois installer ces deux packages, votre systeme est prêt. Maintenant vous pourrez installer les eutres packages basés sur SDL, ils sont nombreux. Certains sont directement développé par l'équipe de Loki, notamment Sam Lantinga ou Stephane Peter, c'est le cas de SDL_Image, SDL_Mixer ou de SMPG. D'autres sont des packages développés par des utilisateurs externes, comme par exemple SDL_gui, sdlpl, ParaGUI,... Pour ma part j'ai installé SDL_Image, SDL_Mixer et SMPG sur mon système car ils sont très régulièrement requis pour des demos que vous trouverez sur la toile. Chacun de ces trois packages possède sa version rpm et tarball. Ici encore les versions rpms se révèlent très bien conçues et je les conseille pour les newbies. De plus chacun des packages possède aussi sa version de base (binary) dans le cadre d'un utilisation simple, mais si vous désirez développer avec vous devrez aussi installer les versions de développements. Autrement j'utilise parfois SDL_gui, je n'ai pas encore beaucoup utilisé ParaGUI, mais j'ai vu les screenshots et cette librarie semble puissante pour créer des fenêtres et autres widgets liés aux interfaces graphiques. Quant à sdlpl, c'est un module pour le langage Perl permmettant d'utiliser SDL et de créer des applications multimédias basées sur SDL depuis ce langage, je compte d'ailleurs en réaliser un cours bientôt. Attention ces trois packages que tous les autres packages ci-dessus soient installer sur votre système sous peine souvent de ne pas compiler. |
|
|
|
Windows |
|
|
|
Sous Windows c'est un peu plus compliqué que sous Linux ...comme d'hab. :-] L'une des différence entre les deux OS est que sous Linux les outils de développements sont directement installer sur le système et font partie intégrante de celui-ci. Au contraire sous Windows il faut installer des outils qui ne sont malheureusement pas toujours très standard (quoique les compilateurs GNU sous inux ne respectent pas toujours les normes ANSI dans le cas du C ou ISO dans le cas du C++), ces outils sont souvents propriétaires (Visual C++, Inprise C++ Builder, pour les plus répandus et utilisés dans l'industrie). Quoiqu'il en soit sous Windows SDL est plutôt orientée pour être utilisée avec VisualC++ 5 ou 6. Il existe des modules pour C++ Builder 4.x, Delphi et le compilateur Cygwin, mais ils ne sont pas supportés par l'équipe de SDL à priori. D'autre part ne pensez pas utiliser SDL avec DJGPP, car il n'existe aucun portage pour ce faire du fait que DJGPP est basé sur le mode Dos que SDL ne prend pas en compte. Nous y voilà installation de SDL pour VisualC++ 5 ou 6. L'utilisation se révèle très simple et l'installation n'est pas plus compliquée. Lorsque vous téléchargez la version adéquate, vous pouvez vous contenter de downloader la version SDL-devel-1.x.x-VCx.zip qui contient tout ce dont vous avez besoin pour développer et travailler avec SDL, ie les librairies précompilées, la dll principale et les fichiers d'entêtes. Si vous désirez recompiler les sources SDL téléchargez la version src du package, mais à priori ce n'est pas très utile sauf si vous désirez connaître comment est codé SDL en interne. Je présuppose que vous êtes familier avec Visual le minimum requis, ie que vous sachiez créer un projet vide sous console Dos/Windows (application win32). Consulter sinon la page réalisée sur le site. Bien donc vous devez créer un projet application win32, une fois cette opération faite, vous devez inclure les libraries dans le projet. Pour ce faire cliquez sur le bouton "Project" puis l'onglet "Add To Project" et enfin sur "Files..." Une boite de dialogue apparaît, sélectionnez les fichiers SDL.lib et SDLmain.lib. Attention lorsque vous les aurez dézippé, un dossier SDL.1.x.x aura été crée, recueillant les dits fichiers. Ce n'est pas un problème, mais il est préférable que vous déplaciez les librairies d'abord depuis ce dossier vers la racine de votre projet. Une fois sélectionnés les fichiers apparaîtront dans l'arborescence de votre projet. Maintenant en ce qui concerne les fichiers d'entêtes, je vous conseille de les placer dans "c:\repertoire_de_vc++\DevStudio\Vc\include\SDL". Créer donc ce répertoire SDL dans include. Placez y ensuite les fichiers d'entêtes, ie tous ceux commençant par SDL_ et aussi begin_code.h et close_code.h. Là encore méfiance puisque lorsque vous décompresserez l'archive SDL un sous répertoire sera crée dans celui où vous désirez placer les headers. Pour terminer l'opération vous devez aller dans le menu "Project\Settings" puis dans la fenêtre qui apparaît, sélectionnez l'onglet "C/C++" puis choisissez la catégorie "Code Generation" et passez votre "Use run-time library" à "Multithread DLL". Voilà maintenant vous pouvez compiler un fichier utilisant SDL. Essayez donc ceci : #include <stdio.h> #include <stdlib.h> #include <SDL/SDL.h> int main(int argc, char **argv){ const SDL_VideoInfo *info_de_mon_systeme;FILE *config; if(SDL_Init(SDL_INIT_VIDEO) <0){ fprintf(stderr,"Impossible d'initialiser SDL\n"); exit(1); } atexit(SDL_Quit); info_de_mon_systeme = SDL_GetVideoInfo(); if((config = fopen("./configuration.txt","w")) == NULL){ fprintf(stderr,"Impossible d'ouvrir ou de créer le fichier\n"); exit(1); } fprintf(config,"Mon système supporte-t-il la création de surfaces en mémoire vidéo ? : %s\n", info_de_mon_systeme->hw_available?"OUI":"NON fprintf(config,"Mon système possède-t-il un window manager ? : %s\n", info_de_mon_systeme->wm_available?"OUI":"NON"); fprintf(config,"Mon système supporte-t-il l'accélération matérielle ? : %s\n", info_de_mon_systeme->blit_hw?"OUI":"NON"); fprintf(config,"Quelle est la quantité de mémoire vidéo que je possède ? : %f\n", info_de_mon_systeme->video_mem); return 0; Bien je suppose que ce fichier à compiler convenablement (il marche évidemment sous Linux et les autres systèmes...). Maintenant si vous désirez le lancer cela va planter !!! Quoi ? me criez vous ! Eh oui il vous faut encore copier la dll (SDL.dll) dans le répertoire courant d'où vous lancez l'application et le tour est joué. Une chose est importante à noter ici, la librairie SDL surcharge la fonction main(), aussi si vous écrivez int main() Visual va vous balancer des tas d'insultes à propos de cette fonction qu'il ne reconnaît pas. En fait lorsque vous travaillez sur un projet SDL sous VisualC++, vous avez l'obligation de donner le prototype suivant à la fonction main : int main(int argc, char **argv). Et voilà votre Visual est prêt pour travailler avec SDL :) A l'instar de Linux il existe un bon nombre de sur-librairies à SDL officielles et non-officielles. Vous pourrez donc à loisir suivre le même cheminement pour installer et utiliser SDL_Image et SDL_Mixer ou SMPG. SDL_Image ne pose aucun problème en ce sens, en revanche les deux suivants sont plus subtiles. En effet SDL_mixer est une librairie vous permettant de lire des fichiers sons tels que les midis, les mods, les wavs et le mpegs. Le problème est que pour ce faire SDL s'appuie sur d'autres librairies qui sont présentes sous Linux par défaut ou du moins sont faciles à installer, sous Windows c'est une tout autre histoire ! Ainsi pour lire les midis SDL_mixer s'appuie sur le toolkit Timidity, qui "pèse" près de 14Mo ! Le download devient un peu lourd dans ce cas. Le problème a été souvent soulevé par la communauté SDL et des projets sont nés pour que SDL utilise directement soit DirectX comme dans le cas de la vidéo, soit que SDL supporte l'accès matériel directement. Mais rien n'a encore aboutit à ce jour. De même en ce qui concerne la partie MPG, SDL_mixer s'appuie sur SMPG développez par Loki. Quoiqu'il en soit encore il est possible de compiler un projet avec SDL_Mixer mais vous ne pourrez pas le lancer. De ce point de vue les choses ne sont pas simples sous Windows. Voilà la partie Windows est terminée, il est toujours interressant de développer conjointement sous plusieurs OS à la fois, de ce point de vue le couple Linux/Windows est gagant lorsque vous désirez toucher beaucoup de personnes avec vos projets. | |
|
|
Divers |
|
|
|
Travailler avec le Window Manager et SDL Vos productions n'auront pas toujours la prétention de tourner en mode plein écran. Parfois vous désirerez utiliser plutôt le mode fenêtré, et un menu voir même des boutons. SDL ne le permet pas directement mais il existe plusieurs solutions viables. Tout d'abord l'utilisation de librairies basées sur SDL et dédiées à cet effet comme SDL_gui ou ParaGUI. Une autre solution consiste simplement à utiliser un toolkit dédié à cet effet, j'ai nommé Gtk. Les adeptes de Linux connaissent bien ce toolkit et l'ont peut etre déja utilisé dans leurs projets. Les autres se demandent peut-être un peu de quoi il s'agit. Il s'agit d'un toolkit comprenant tous les aspects nécsessaires à la création de fenêtres, de widgets, des signaux associés... et que bien que très utilisé sous Linux (via le projet Gnome), il existe aussi sous Windows un portage. Eh oui il existe beaucoup d'autres façons sous Windows pour créer une interface graphique sans utiliser l'API Win32 (Tcl/Tk, Gtk, Qt...) mais il est vrai que c'est souvent moins beau que l'API de Microsoft. Pour autant que je sache je n'ai encore jamais vu cependant une application utiliser conjoitement SDL et l'API Win32. Bref, que faut-il priviligier ? Les APIs dédiées comme Gtk ou plutôt les APIs basées sur SDL. Tout dépend de votre but et de l'interface que vous désirez réaliser. Il n'existe pas une meilleure manière en la matière. D'autre part il n'existe que peu de doc ou d'exemples basés sur ce type de créations. Je vais donc en faire quelques uns d'ici peu.
La documentation et l'aide Depuis la version 1.1.5 (que je vous conseille d'upgrader car elle est bugguée), la Simple DirectMedia Layer est fournie avec la documentation mise en place par une équipe de bénévoles fous de SDL. Cette documenation est très complète et regroupe toutes les fonctions, structures, et données que SDL gère. Attention cependant ne compté par pour l'instant y trouver un quelconque tutorials, seuls quelques exemples s'y trouvent parsemés et c'est tout. Il n'existe que peu de tutorials au sujet de SDL et les meilleures sources d'aides se trouvent être le newsgroup dont l'adresse se trouvent à cette page (il existe plusieurs newsgroups suivants le sujet), l'autre source de discussion inépuisable est le channel irc que l'on trouve sur : irc.openprojects.net channel #sdl. Enfin pour ceux que la langue de shakespeare rebute et qui possèdent un compte sur caramail, il existe un forum de discussions dédiés à SDL maintenu par votre fidèle serviteur)
| |
|
|
|
|
|