CSFML 2.1 pour pure basic, tous ensemble!

Vous avez développé un logiciel en PureBasic et vous souhaitez le faire connaitre ?
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

CSFML 2.1 pour pure basic, tous ensemble!

Message par poshu »

Bonjour tout le monde,
Ces derniers temps, j'ai fait le tour des wrapper pour tout ce qui touche de prêt ou de loin à la 2D, et il y a un nom qui revient souvent: SFML. SFML est une bibliothèque 2D, libre, disponibles sur les 3 OS targets de PureBasic et de grande qualité (voyez par vous même la démo de Kelebrindae et G-rom pour vous faire une petite idée).
SFML est donc tout à fait adaptée à Pure Basic.

De mon coté, je me suis mis à faire un wrapper de CSFML qui imite les headers de la librairie originale, par exemple Joystick.h devient:

Code : Tout sélectionner

CompilerIf Not Defined(SFML_JOYSTICK_H,#PB_Constant)
	#SFML_JOYSTICK_H = #True
	
	XIncludeFile "Purebasic/Window/Export.pbi"
	
	Enumeration
		#sfJoystickCount       = 8	;Maximum number of supported joysticks
		#sfJoystickButtonCount = 32	;Maximum number of supported buttons
		#sfJoystickAxisCount   = 8	;Maximum number of supported axes
	EndEnumeration
  
	Enumeration	sfJoystickAxis
		#sfJoystickX
		#sfJoystickY
		#sfJoystickZ
		#sfJoystickR
		#sfJoystickU
		#sfJoystickV
		#sfJoystickPovX
		#sfJoystickPovY
	EndEnumeration
  
	ImportC "csfml-window.lib"
		sfJoystick_isConnected(joystick.i)
		sfJoystick_getButtonCount(joystick.i)
		sfJoystick_hasAxis(joystick.i, sfJoystickAxis.i)
		sfJoystick_isButtonPressed(joystick.i,button.i)
		sfJoystick_getAxisPosition(joystick.i, sfJoystickAxis.i)
		sfJoystick_update()
	EndImport
CompilerEndIf
J'ai fait comme ça system et une bonne partie de window, mais je ne sais pas si l'approche est valide ou non (c'est la première fois que j'essaye de binder une bibliothèque).

Les débuts de portages sont assez nombreux des deux cotés de l'atlantique, mais je me dis qu'on pourrait gagner du temps si on faisait ça en groupe. Des gens intéressés par l'idée?
Avatar de l’utilisateur
kernadec
Messages : 1606
Inscription : ven. 25/avr./2008 11:14

Re: CSFML 2.1 pour pure basic, tous ensemble!

Message par kernadec »

bonjour poshu
merci c'est cool, voici un lien pour télécharger pour la doc etc... http://www.sfml-dev.org/

Cordialement
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: CSFML 2.1 pour pure basic, tous ensemble!

Message par Backup »

Pourquoi ne pas partir du boulot de G-rom
qui est deja tres tres complet ?

Faire de multiples Wrapper ne fait pas vraiment avancer les choses non ?
(meme si je trouve super ton travail dessus )

G-rom a tout regroupé dans un seul Fichier (le PBI est Compatible Purebasic 5.21 )

dispo ici :
http://michel.dobro.free.fr/Forum_pb/sf ... o_5_21.zip

bon G-rom a dit qu'il allait passer le Pbi en Version Stable 2.1 de SFML .. (car il s'agit ici de la Version Beta 2.00 )

pourquoi ne pas vous réunir pour accélérer et faciliter le travail ?
car ça risque de faire 2 Wrapper qui font le meme travail ....


de plus ... il me semble (mais je peux me tromper) que G-Rom Wrappe directement la (Les) DLL(s)
ce qui fait qu'il est possible ensuite de n'utiliser que directement les Fonctions comme si c'etait du Purebasic ...
juste un

Code : Tout sélectionner

; Include SFML 2.0
XIncludeFile "SFML-2.pbi"
en debut de Listing et c'est bon .... on accède aux Fonctions ....

je prefere sa methode car , elle permet eventuellement d'en faire une Librairie Purebasic avec Tailbite ..
et dans ce cas , plus de Pbi a charger ... Plus qu'a fournir les Dll et plus qu'a coder :D


alors que ta méthode Wrappe le *.Lib .... ce qui oblige a avoir un

Code : Tout sélectionner

 XIncludeFile "Purebasic/Window/Export.pbi"
et un

Code : Tout sélectionner

ImportC "csfml-window.lib"
pour chaque commandes au debut du code ....

mais je n'ai peut etre pas tout compris :oops: :)

en tout cas le PBI de Cpl-Bator/G-Rom est plus simple a appréhender pour un Codeur Novice en Bibliothèque importé
c'est transparent ... :)

et en plus compatible Windows/Linux , si j'ai bien compris :)

Ps: Toutefois , je constate que G-Rom utilises une DLL "pbsfml-2.dll"
et qu'on a pas le Code .... c'est peut etre là dedans qu'il Wrappe comme toi les fonctions (de la meme façon )....
ce serai cool d'avoir le Source ...... mais bon ...
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: CSFML 2.1 pour pure basic, tous ensemble!

Message par G-Rom »

Dobro a écrit :Ps: Toutefois , je constate que G-Rom utilises une DLL "pbsfml-2.dll"
et qu'on a pas le Code .... c'est peut etre là dedans qu'il Wrappe comme toi les fonctions (de la meme façon )....
ce serai cool d'avoir le Source ...... mais bon ...
Oui, comme SFML utilise à elle seule 6 DLL et que le wrapp C en utilise autant sans compté celle du son & de la libstd selon le compilateur
Fournir un wrapp avec une quinzaine de dll...
La prochaine version aura aussi qu'une seule DLL, si tu veut les sources, elles seront dispo aussi.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: CSFML 2.1 pour pure basic, tous ensemble!

Message par Backup »

Merci .. les sources de la Dll , en elles meme ne m’intéresse pas plus que ça ...

si ce n'est , pour la façon dont tu Wrappes , vu que j'y connais que dalle la dedans ... :)
alors l'examen de la chose pourrai etre instructif :)

quoiqu'il en soit, merci pour ton boulot, ça etend les possibilités de Purebasic, donc c'est Top :)


Dans un autre registre, la Librairie M3D engine aussi ....
http://forums.purebasic.com/english/vie ... 89ce21ca8d

je la suit depuis un petit moment ... c'est impressionnant aussi a voir tourner : )
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Re: CSFML 2.1 pour pure basic, tous ensemble!

Message par poshu »

Ouais, le résultat est le même que G-rom, on peut utilise les fonctions nativement dans pure... L'approche est différente, puisque je ne suis pas capable de modifier CSFML pour obtenir une seule DLL, donc je wrappe module par module: ça me permet de constater mon avancement et de débugger seulement un poignée de fonction à la fois...

De toutes façons, je ne suis pas fixé sur cette solution, elle a été choisie "par défaut", mais faut bien comprendre que ce poste, c'est surtout pour mesurer l'intéret des gens et savoir si je continue -doucement mais surement- dans ma voie ou si on peut regrouper nos compétences pour avoir un meilleur résultat...

MP3D, c'est windows only, donc c'est même pas envisageable pour moi (Machine principale sur ubuntu, deux mac et seulement une partoche windows que je démarre une fois tous les 36 du mois...)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: CSFML 2.1 pour pure basic, tous ensemble!

Message par Backup »

poshu a écrit : L'approche est différente, puisque je ne suis pas capable de modifier CSFML pour obtenir une seule DLL

ben si G-rom file le source de sa Dll , tu aura un aperçu de la technique utilisé ...
je suppose qu'il inclue d'une façon ou une autres les multiples DLL de SFML dans sa DLL principale...
(inclusion binaire ??? par exemple ... ) :)
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: CSFML 2.1 pour pure basic, tous ensemble!

Message par G-Rom »

Je ne me base pas du tout sur la CSFML, je compile et j'installe la SFML 2.1 en statique , et je fait mon wrapper lié statiquement à la SFML 2.1
syntaxiquement , c'est quasiment la même chose que la CSFML, avec dès fois quelques fonctions de plus, par exemple pour les modes vidéo :

VideoMode.hpp

Code : Tout sélectionner

#ifndef PB_SFML_VIDEOMODE_HPP
#define PB_SFML_VIDEOMODE_HPP
///////////////////////////////////////////////////////////////////////////////
//
///////////////////////////////////////////////////////////////////////////////
FUNCTION_EXPORT sf::VideoMode * sfVideoMode_getDesktopMode(void);


///////////////////////////////////////////////////////////////////////////////
//
///////////////////////////////////////////////////////////////////////////////
FUNCTION_EXPORT const PB_LONG sfVideoMode_countFullscreenModes();

///////////////////////////////////////////////////////////////////////////////
//
///////////////////////////////////////////////////////////////////////////////
FUNCTION_EXPORT void sfVideoMode_getFullscreenModes(sf::VideoMode * array);

///////////////////////////////////////////////////////////////////////////////
//
///////////////////////////////////////////////////////////////////////////////
FUNCTION_EXPORT PB_BYTE sfVideoMode_isValid(sf::VideoMode * mode);

#endif

VideoMode.cpp

Code : Tout sélectionner

#include <SFML/Window/VideoMode.hpp>

#include <vector>
#include "Config.hpp"
#include "Window/VideoMode.hpp"

///////////////////////////////////////////////////////////////////////////////
//
///////////////////////////////////////////////////////////////////////////////
FUNCTION_EXPORT sf::VideoMode * sfVideoMode_getDesktopMode(void)
{
	sf::VideoMode * mode = new sf::VideoMode();
	sf::VideoMode & ref  = *mode;
	ref = sf::VideoMode::getDesktopMode();
	return mode;
}
///////////////////////////////////////////////////////////////////////////////
//
///////////////////////////////////////////////////////////////////////////////
FUNCTION_EXPORT const PB_LONG sfVideoMode_countFullscreenModes()
{
	std::vector<sf::VideoMode> modes = sf::VideoMode::getFullscreenModes();
	return modes.size();
}


///////////////////////////////////////////////////////////////////////////////
//
///////////////////////////////////////////////////////////////////////////////
FUNCTION_EXPORT void sfVideoMode_getFullscreenModes(sf::VideoMode * array)
{
	std::vector<sf::VideoMode> modes = sf::VideoMode::getFullscreenModes();
	
	std::vector<sf::VideoMode>::iterator it;
	int index = 0;
	for(it = modes.begin(); it < modes.end(); ++it)
	{
		sf::VideoMode & ref = *it;
		array[index] = ref;
		index++;
	}

}

///////////////////////////////////////////////////////////////////////////////
//
///////////////////////////////////////////////////////////////////////////////
FUNCTION_EXPORT PB_BYTE sfVideoMode_isValid(sf::VideoMode * mode)
{
	if(mode->isValid())
	{
		return 1;
	}
	else
	{
		return 0;
	}
}
Dans ce code, j'ai donc une fonction qui n'existe pas nativement dans CSFML : sfVideoMode_countFullscreenModes(), si je suit la CSFML , je me retrouve avec des fuites mémoires par endroit.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: CSFML 2.1 pour pure basic, tous ensemble!

Message par Backup »

ouaip , ben c'est vraiment pas mon univers :lol:

Trop vieux pour ces conneries :)

en tout cas chapeau pour le Rendu :)
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Re: CSFML 2.1 pour pure basic, tous ensemble!

Message par poshu »

Ah, je pensais que passer par une syntaxe C était plus simple.
Du coup, si on prend ton modèle, je pourrais faire quoi pour t'aider?
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: CSFML 2.1 pour pure basic, tous ensemble!

Message par G-Rom »

poshu a écrit :Ah, je pensais que passer par une syntaxe C était plus simple.
Du coup, si on prend ton modèle, je pourrais faire quoi pour t'aider?
Pas forcement, PureBasic peu très bien manipuler des objets c++ comme valeur de retour ou comme paramètres de fonctions :
sfVideoMode_isValid(sf::VideoMode * mode)
PB le considéra comme un pointeur lambda.
Si tu veut m'aider, je ne vais pas dire non, ca fait plusieurs mois que sa traine ici ^^
Il faudrait que je créer un espace dédié (SVN) ou mettre le code source du wrapper.
Pour le moment , la partie Window & System sont wrappé a 100% , j'ai repris dernièrement la partie audio.
Je compilerais les cibles suivantes : Linux(x64) via gcc & windows(x86) via mingw , avec cMake.
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Re: CSFML 2.1 pour pure basic, tous ensemble!

Message par poshu »

Mon incompétence est assez élevée quand il s'agit de faire de l'objet, mais je veux essayer de bosser sur la version OSX.
Après Window et System, c'est ce que j'avais déjà wrappé sur CSFML 2.1, mais bon, le processus est pas particulièrement compliqué donc le reste est aussi à ma porté.

Si tu peux créer un serveur de subversion, je m'y attellerai dès que j'ai un moment de libre (la semaine prochaine est particulièrement vide pour moi).
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: CSFML 2.1 pour pure basic, tous ensemble!

Message par G-Rom »

Le serveur est déjà créer, je mettrais les sources dans le courant de la semaine ( mardi surement ) , je te tiens au jus , je te donnerais la marche à suivre.
Rencarde toi déjà sur Cmake sur mac ;)
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Re: CSFML 2.1 pour pure basic, tous ensemble!

Message par poshu »

Je suis déjà en train de regarder, la documentation ne manque pas, ca va passer.
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: CSFML 2.1 pour pure basic, tous ensemble!

Message par G-Rom »

Je vais mettre en ligne les sources ce soir, j'ai attaqué la partie graphique ( le sf::RenderScreen() )
il me faut ton mail pour google code si tu veut faire des update sur le code.
tu sait utilisé SVN ? si oui , impeccable ;)
Je vais pas me repenché dessus avant la semaine prochaine, je pourrais quand même répondre au question via ce fil de discutions, mon cmake n'est pas terrible pour le moment, pour le dev, tu pourras lié la SFML dynamiquement dans un premier temps ( la SFML est livré avec mon code, elle corrige en partie le bug de l'audio , c'est celle la qu'il faut utilisé ). Je bosse comme un dingo, vendredi je passe ma journée dans les papiers, et le week-end je vais surement faire la SFML game jam , donc pas assez de temps... :D
Répondre