C vers PB : wrapping super chiant
C vers PB : wrapping super chiant
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.
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.
-
- Messages : 1307
- Inscription : dim. 08/juil./2007 18:32
- Localisation : Toulouse
Re: C vers PB : wrapping super chiant
il y a quelques mois j'ai fait mumuse avec Chipmunkeddy 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.

config de mon ordi: seven, directx11, Pentium(R) DualCore E5700, RadeonHD 4550 512MB, PureBasic 4.61 x86
non c'est du C
C'est surtout le passage des structures en paramètre qui alourdit mon code.
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
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 :
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 :
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 :
Cette fonction bidon (qui est en c++) te retourne une classe , comment la récuperer en PB ? très simple :extern "C"
{
__declspec(dllexport) MaClass * CreateBody()
{
MaClass *A = new MaClass;
return A;
}
}
Code : Tout sélectionner
ImportC :
CreateBody.i ()
endImport
EDIT :
Pour les paramètres c'est la même chose :
extern "C"
{
__declspec(dllexport) void FreeBody(MaClass *body)
{
delete(body);
}
}Code : Tout sélectionner
ImportC : FreeBody (body.i) endImport
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.
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.
Tu t'es embêter a importé les fonctions avec les structures ?
du genre :
du genre :
Code : Tout sélectionner
FreeTruc ( *Objet.Truc )