Annonces Google
Serveur IRC
Serveur : irc.portlane.se
Canal : #AmigaNG
Activité du Site

Pages vues depuis 25/07/2007 : 24 889 025

  • Nb. de membres 186
  • Nb. d'articles 1 269
  • Nb. de forums 19
  • Nb. de sujets 20
  • Nb. de critiques 24

Top 10  Statistiques

Index du forum »»  Création-Développement »» Ou sont les sources de SuperTuxKart pour Amiga?

Ou sont les sources de SuperTuxKart pour Amiga?#1369

7Contributeur(s)
thelliersinisruszzd10hElwoodCreolsscriptjestercorto
3 Modérateur(s)
K-LElwoodcorto
Creols Creolsicon_post
Citation : thellier?

Enfin on sait pourquoi ce Tux est lent

Tux ? ce ne serait pas Tex, par hasard ?

Cé tex est lent !
0
zzd10h zzd10hicon_post
thellier thelliericon_post
Hello

J'ai pas trop avancé sur ce sujet : je suis incapable de savoir ou est la fonction de traçage fautive dans les sources (je suis nul en c++ )

En effet on a
SuperTuxkart --> PLIB -> MiniGL
Les 3 progs font 9MO au total de sources et je suis pas foutu de savoir qui appelle le drawarray de polygon de juste 3 ou 4 points
Je veut dire
Est ce PLIB qui demande de tracer 3000 points et minigl qui est con et décide de faire 1000 x 3 points ?
Est ce SuperTuxkart qui demande de tracer 3000 points et PLIB qui est con et décide de faire 1000 x 3 points ?
Est ce SuperTuxkart qui est con à la base et fait 1000 x 3 points ?

Bref il faudrait tracer un peu tout ça...
Y aurait il un outil comme LibSnooper pour OS4 ? (cad voir tout les appels à une .library) que je vois déjà si c'est minigl qui est con ... (à la limite je préférerais il suffirait de le patcher et tout les progs en profiteraient....)

http://aminet.net/package/dev/debug/2b_LibSnooper


Alain
scriptjester scriptjestericon_post

N'étant pas programmeur, je ne sais pas si ça correspond à ta demande, mais il y a ce programme sur OS 4 :

http://www.os4depot.net/index.php?function=showfile&file=development/debug/hieronymus.lha

Je crois qu'il y avait un problème selon la machine utilisée mais Corto pourrait en dire davantage.

thellier thelliericon_post
A propos de hieronymus
non non la logique de hieronymus est différente : il va voir tout les temps t quel fonction est appelé
Alors que moi je voudrais tout les appels de fonctions au fur et à mesure qu'ils arrivent....

Alain
corto cortoicon_post
J'ai été pris par ce sujet et ... les derniers posts me font mordre à l'hameçon !

Hieronymus pourra être utilisé pour trouver des lenteurs dans Tux mais ça ne va pas servir à Alain dans l'immédiat car il a localisé un problème et

Alain : Pour un outil comme tu le décris, j'ai eu une idée la-dessus (à des fins de debug / profiling) mais je n'en connais pas qui existe.

J'avoue ne pas avoir compris ce que fait LibSnooper.

Concernant Hieronymus, il ne fonctionne malheureusement que sur MicroAOne ... tant qu'un bug ne sera pas corrigé dans l'OS.
J'avais passé du temps à essayer de contourner le problème avec des astuces mais impossible ... Dommage, j'aurais été fier de moi pour le coup !

Alain : Avec tout ce que tu explores, je suis sûr qu'il y aurait moyen d'apporter des améliorations ici et là.
Et j'ai aussi quelques pistes à explorer et infos à révéler :-)
thellier thelliericon_post
Hello

>J'avoue ne pas avoir compris ce que fait LibSnooper
Tu peut snooper n'importe quelle library (dont tu a les !include!) ça fait afficher les appels de fonctions (+ le contenu des registres = les parametres de la fonction en 68k) au fur et à mesure du déroulement d'un prog
c utile pour voir comment fait pour bien (mal) marcher un prog dont tu as pas les sources et comment il utilise efficacement (affreusement) une library

Evidemment en OS4 avec les interfaces on peut pas faire pareil (patcher une .library quelconque)
Mais on pourrais patcher une .library en particulier (ici minigl)
ainsi on verrai les appels de fonctions GL au fur et à mesure du déroulement d'un prog

Là j'ai pas le temps de le faire : je suis dans mon Microbe3D
mais voilà l'idée : je me suis basé sur mon prog (inutile) PatchWarp3D
Ici en exemple patchage de juste W3D_BindTexture --> faudrait genérer
les patch pour toutes les fonctions de minigl : à l'occasion je les ferai dans Excel

Alain


/*==========================================================================*/
/* SnoopWarp3D - Alain THELLIER - 2012 - Paris - FRANCE */
/*==========================================================================*/
#define __USE_INLINE__
#define __USE_BASEHOOK__
#define __USE_OLD_TIMEVAL__
/*==========================================================================*/
#!include!
#!include!
#!include!
#!include!
#!include!
#!include!
#!include!
#!include!
#!include!
#!include!
#!include!
#!include!
/*==========================================================================*/
struct Library *AslBase =NULL;
struct Library *Warp3DBase =NULL;
struct IntuitionBase *IntuitionBase =NULL;

struct Warp3DIFace* IWarp3D =NULL;
struct IntuitionIFace* IIntuition =NULL;
struct AslIFace* IAsl =NULL;
/*======================================================================================*/
typedef ULONG (*HOOK_W3D_BindTexture) (void *Self,W3D_Context *context, ULONG tmu, W3D_Texture* texture);
/*==========================================================================*/
APTR Ptr_W3D_BindTexture;
ULONG Calls_W3D_BindTexture=0;
HOOK_W3D_BindTexture True_W3D_BindTexture;
/*==========================================================================*/
#define PATCH(old,new,ptr) ptr=SetMethod((struct Interface *)IWarp3D, offsetof(struct Warp3DIFace, old) ,(APTR)new); VAR(ptr);
/*==========================================================================*/
ULONG Calls_All=0;
/*==========================================================================*/
#define VULONG(var) {printf(" " #var "=" ); printf("%ld\n", ((ULONG)var) );}
#define VFLOAT(var) {printf(" " #var "=<%2.2f> ",var); }
#define VNAME(var) {printf(" " #var "=<%s> ",var); }
#define VFUNC(var) {printf(" " #var "=<%s> ",var); }
#define VCHAR(var) {printf(" " #var "='%c' ",var); }
#define VAPTR(var) {if(var!=0) {printf(" " #var "=" ); printf("%ld\n", ((ULONG)var) );} else {printf(" " #var "=NULL\n");}}
#define VBOOL(var) {if(var==TRUE) printf(" " #var "=TRUE\n"); else printf(" " #var "=FALSE\n");}
/*==========================================================================*/
ULONG Patched_W3D_BindTexture(W3D_Context* context, ULONG tmu, W3D_Texture *texture)
{
ULONG result;

VFUNC(W3D_BindTexture) VAPTR(context) VULONG(tmu) VAPTR(texture)
result=True_W3D_BindTexture(IWarp3D,context,tmu,texture);
Calls_W3D_BindTexture++;
Calls_All++;
return(result);
}
/*==========================================================================*/
void PatchLib(void)
{
PATCH(W3D_BindTexture,Patched_W3D_BindTexture,True_W3D_BindTexture);
}
/*==========================================================================*/
void RestaureLib(void)
{
PATCH(W3D_BindTexture,True_W3D_BindTexture,Ptr_W3D_BindTexture); VULONG(Calls_W3D_BindTexture);
}
/*==================================================================================*/
BOOL OpenAmigaLibraries(void)
{
#define LIBOPEN(libbase,name,version) libbase =(void*)OpenLibrary(#name,version); if(libbase==NULL) return(FALSE);
#define LIBOPEN4(interface,libbase) interface=(void*)GetInterface((struct Library *)libbase, "main", 1, NULL); if(interface==NULL) return(FALSE);


LIBOPEN(AslBase,asl.library,37L)
LIBOPEN(IntuitionBase,intuition.library,0L)
LIBOPEN(Warp3DBase,Warp3D.library,5L)

LIBOPEN4(IExec,SysBase)

LIBOPEN4(IAsl,AslBase)
LIBOPEN4(IIntuition,IntuitionBase)
LIBOPEN4(IWarp3D,Warp3DBase)

return(TRUE);
}
/*======================================================================================*/
void CloseAmigaLibraries()
{
#define LIBCLOSE(libbase) if(libbase !=NULL) { CloseLibrary((struct Library *)libbase ); libbase=NULL; }
#define LIBCLOSE4(interface) if(interface!=NULL) { DropInterface((struct Interface*)interface ); interface=NULL; }


LIBCLOSE4(IAsl)
LIBCLOSE4(IIntuition)
LIBCLOSE4(IWarp3D)

LIBCLOSE(AslBase)
LIBCLOSE(IntuitionBase)
LIBCLOSE(Warp3DBase)

}
/*==========================================================================*/
int main(int argc, char **argv)
{
if (OpenAmigaLibraries()==FALSE)
{printf("Cant open xxx.library\n"); return FALSE;}

printf((void*)"Old functions pointers:\n");
PatchLib(void)
printf((void*)"Dont close this window...\n");
OSAlert("Library patched (Ctrl C=exit)");

Wait(SIGBREAKF_CTRL_C);

RestaureLib(void)

if(Calls_All==0)
printf((void*)"Library was never called ...\n");
else
printf((void*)"Library was called %ld times :-)\n",Calls_All);
OSAlert("Library restaured");

CloseAmigaLibraries();
exit(0);
}
/*==========================================================================*/




Petites Annonces

0 annonce(s) publiée(s)

Consulter

AmigaOS 4.1

Laissez-vous tenter par
AmigaOS 4.1
AmiTheme

AmiTheme