Page 1 sur 2
C vers PB : wrapping super chiant
Publié : ven. 16/janv./2009 22:47
par eddy
Je suis entrain de wrapper la librairie Chipmunk ( moteur physique 2D )
Et je me rends compte que l'importation sous PB est limité.
Je suis obligé de faire des MACROs de malade et de parser le code dans tous les sens pour utiliser une simple fonction C
Il faudrait étendre la fonctionnalité ImportC.
Re: C vers PB : wrapping super chiant
Publié : ven. 16/janv./2009 22:56
par beauregard
eddy a écrit :Je suis entrain de wrapper la librairie Chipmunk ( moteur physique 2D )
Et je me rends compte que l'importation sous PB est limité.
Je suis obligé de faire des MACROs de malade et de parser le code dans tous les sens pour utiliser une
Il faudrait étendre la fonctionnalité ImportC.
il y a quelques mois j'ai fait mumuse avec Chipmunk

Publié : ven. 16/janv./2009 23:11
par eddy
Je vais fournir une nouvelle version à partir de la 4.1.0
Parce que la précédente version n'était pas de moi.
Elle sera plus proche du code original.
Par contre je ne sais pas si elle va marcher pour les 64bits

Publié : ven. 16/janv./2009 23:12
par Anonyme
Comment tu importes ? via une lib une dll ?
Publié : ven. 16/janv./2009 23:30
par eddy
une lib
J'ai ajouté un projet PelleC pour le compiler.
Publié : ven. 16/janv./2009 23:54
par Anonyme
C'est très simple , pas besoin de te faire chier avec des macro
Chipmunk est OO ?
Fait voir un bout de ton wrapp pb.
Publié : sam. 17/janv./2009 0:04
par eddy
non c'est du C
C'est surtout le passage des structures en paramètre qui alourdit mon code.
Code : Tout sélectionner
Macro CONST : : EndMacro ;/// Unsigned Int
Macro UINT : l : EndMacro ;/// Constant
Macro _void_POINTER : i : EndMacro
Macro _cpShape_POINTER : i : EndMacro
Macro PARAM_cpVect(ParamName) : ParamName#_x.f, ParamName#_y.f : EndMacro
Macro READ_cpVect(ParamName) : ParamName\x, ParamName\y : EndMacro
Structure cpVect
x.f: y.f
EndStructure
CompilerIf 0
Procedure._cpShape_POINTER cpPolyShapeNew (*body.cpBody, numVerts.i, *verts.cpVect, offset.cpVect):EndProcedure
CompilerEndif
ImportC "..\Chipmunk\Chipmunk.lib"
PrototypeC cpSpaceBodyIterator (*body.cpBody, *datas)
cpInitChipmunk ()
cpMomentForCircle.f (m.f, r1.f, r2.f, PARAM_cpVect(offset))
cpMomentForPoly.f (m.f, CONST numVerts.i, *verts.cpVect, PARAM_cpVect(offset))
cpSegmentShapeNew._cpShape_POINTER (*body.cpBody, PARAM_cpVect(a), PARAM_cpVect(b), r.f)
cpvforangle (*RESULT.cpVect, CONST a.f)
....
EndImportC
Publié : sam. 17/janv./2009 0:25
par Anonyme
Bon , tu t'alourdis pour rien.
tu n'est pas obliger d'avoir les structures de Chipmunk dans pb.
tu va me dire , oui , mais comment je manipule les éléments de structure ?
tu fait des fonctions en c que tu exportes.
ex :
extern "C"
{
__declspec(dllexport) MaClass * CreateBody()
{
MaClass *A = new MaClass;
return A;
}
}
Cette fonction bidon (qui est en c++) te retourne une classe , comment la récuperer en PB ? très simple :
le principe est le même pour du c. bosse avec des pointeurs. créer des Accesseurs en c pour modifier le contenu des strutures.
EDIT :
Pour les paramètres c'est la même chose :
extern "C"
{
__declspec(dllexport) void FreeBody(MaClass *body)
{
delete(body);
}
}
Publié : sam. 17/janv./2009 0:31
par eddy
C'est pas la voie que j'ai choisi
car si je suis ton idée il faut que fasse un wrapper mais du côté C/C++ (ce qui me paraît plus compliqué)
Ah.. Je dois préciser que j'ai codé un générateur d'INCLUDE pour PB.
Je suis pas fou... Il y a trop de fonctions pr faire ça à la main.

Il mettra à jour le wrapper pour chaque update de chipmunk.
Publié : sam. 17/janv./2009 2:05
par KarLKoX
La solution proposée par Cpl.Bator est celle que j'utilise et je peux te dire que c'est la meilleure aussi bien en terme de maintenabilité que d'utilisation et c'est plus dans l'esprit lorsque l'on importe une bibliothèque.
Publié : sam. 17/janv./2009 2:18
par eddy
Vous avez des moulinettes pour faire vos wrapper ?
Parce que le problème est que je ne vais me taper toutes les fonctions et structures à la main.
Publié : sam. 17/janv./2009 10:38
par KarLKoX
J'en avais codé une pour FMOD mais pour les autres, je les ai codé à la main.
Publié : sam. 17/janv./2009 11:20
par Anonyme
Pareil comme les romains

, après tu passes plus de temps à codé une moulinette que wrappé

Publié : sam. 17/janv./2009 13:03
par eddy
c bon de toute façon j'ai fini

Publié : sam. 17/janv./2009 13:10
par Anonyme
Tu t'es embêter a importé les fonctions avec les structures ?
du genre :