Debat Languages Basics

Sujets variés concernant le développement en PureBasic
freddix
Messages : 101
Inscription : dim. 08/févr./2004 19:37

Message par freddix »

moi je vous dit, le top c'est PureBasic [ DLLs ] et DarkBasic Professional.
Je crées des commandes pour le Dark Basic Professional en utilsiant le PureBasic et en exporant en DLLs, J'utilise les DLLs de DBPro directement par ma DLL de purebasic, avec cela, j'évite partiellement la couche de gestion BASIC de dbpro qui est lente et résultat je gagne beaucoup en FPS :)

Et la si j'arrive à adapter Dark Game SDK sur le purebasic, ça risque de tout flamber ... même le blitz risque de souffrir un bon coup ;)
PureBasic + DBPro = Excellentissime [ et très facile une fois que l'on a fait son wrapper pour les commandes DBPro à utiliser dans le pure ]
PureBasic + DGSdk = Risque d'être encore + excellentissime :) j'en dirais plus dans quelques jours ;)
Coolman
Messages : 432
Inscription : sam. 01/janv./2005 16:07

Message par Coolman »

nico a écrit :non, j'ai rien modifié, mais avec tous ces posts......


Résultat des tests :moyenne sur 5 essais

Pure Basic:7162

Blitz:6872

Je suis ok pour dire que Blitz est gagnant de 290ms
Merci nico, je savais bien qu'en vous provoquant un peu :wink: , quelqu'un ferait le test sous pureb complet concernant mon premier test, donc si je comprend bien, pure est plus rapide sur celui ci, quelqu'un d'autre peut confirmer ?

pour le second test (tri) je m'attendais a mieux de blizb la difference est quasi nul, il s'agit de millisecond, c'est une bonne nouvelle, je dois avouer que je prefere la syntaxe de pure et que si la version de blitzmax windows que je comptes tester des sa disponib ne fait pas mieux alors pureb me parait plus interessant :wink:

Quelqu'un d'autres a fait le test tri shell metzer, pourrait il poster le resultas ?

8)
Coolman
Messages : 432
Inscription : sam. 01/janv./2005 16:07

Message par Coolman »

freddix a écrit :moi je vous dit, le top c'est PureBasic [ DLLs ] et DarkBasic Professional.
Je crées des commandes pour le Dark Basic Professional en utilsiant le PureBasic et en exporant en DLLs, J'utilise les DLLs de DBPro directement par ma DLL de purebasic, avec cela, j'évite partiellement la couche de gestion BASIC de dbpro qui est lente et résultat je gagne beaucoup en FPS :)

Et la si j'arrive à adapter Dark Game SDK sur le purebasic, ça risque de tout flamber ... même le blitz risque de souffrir un bon coup ;)
PureBasic + DBPro = Excellentissime [ et très facile une fois que l'on a fait son wrapper pour les commandes DBPro à utiliser dans le pure ]
PureBasic + DGSdk = Risque d'être encore + excellentissime :) j'en dirais plus dans quelques jours ;)

Freddix, tu m'as l'air assez calé en 3d et d'un niveau avancé, j'ai lu quelques uns de tes posts sur differents forums a supposer que tu utilises le meme pseudo, je me pose la question, pourquoi utiliser deux languages en meme temps dbpro et pureb, pourquoi ne pas par exemple adapter un moteur 3d open du genre irlicht ou basicgl il y'en d'autres a pureb... quoi que tu en dises, j'ai testé dbpro, je ne le trouve pas interessant niveau vitesse, en plus assez buggé, la version que j'ai testé a planté de nombreuses fois...
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Les tests de rapidités sont toujours intéressants, mais les gens qui comme moi ne connaissent rien à la programmation des jeux sont intéressés par les possibilités offertes par les différents progs.

Que peux tu nous en dire?
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message par Oliv »

Coolman a écrit :
Oliv a écrit :
Coolman a écrit : Je serais curieux de savoir sur quoi exactement tu es d'accord 8O , mais avant relis si c'est possible ce post...
je veux bien, mais dis moi d'abord pourquoi est-ce que je dois relire ???????
Tout simplement parce je le repete, les faits sont la, blitzbasic (en plus j'ai la version demo) est plus rapide que tous les autres...
reste que l'optimisation n'est peut etre pas votre objectif, je dois dire que pureb est suffisement rapide comme ca bien que je n'ai pas testé la version complete...
apres tout, si vous etes fans de pureb, grand bien vous fasse
Je ne suis pas un fan de pure, et je suis pour les comparaisons avec d'autres languages, mais pas que sur la consultation de tableaux ou l'addition de nombres flottants répettés à 2 millions de fois. Il faut aussi tester ce que j'avais déjà dit, la lecture écriture dans des fichiers, la rapidité de chargement de sprites/objets3D, la vitesse de création des fenêtres et d'affichage des gadgets etc.. parce-que quand on fait un programme, on utilise pas que la console et un tableau à X milliers de cases :wink:

Sinon pour l'intervention de Freddix, je comprends sont point de vue de mélanger les deux languages car je pense que c'est beaucoup plus simple qu'adapter basicgl, pour des perforamnces très acceptables. Et avec Dark Game SDK ça doit l'être encore plus :D
Coolman
Messages : 432
Inscription : sam. 01/janv./2005 16:07

Message par Coolman »

Oliv a écrit :
Coolman a écrit :
Oliv a écrit : je veux bien, mais dis moi d'abord pourquoi est-ce que je dois relire ???????
Tout simplement parce je le repete, les faits sont la, blitzbasic (en plus j'ai la version demo) est plus rapide que tous les autres...
reste que l'optimisation n'est peut etre pas votre objectif, je dois dire que pureb est suffisement rapide comme ca bien que je n'ai pas testé la version complete...
apres tout, si vous etes fans de pureb, grand bien vous fasse
Je ne suis pas un fan de pure, et je suis pour les comparaisons avec d'autres languages, mais pas que sur la consultation de tableaux ou l'addition de nombres flottants répettés à 2 millions de fois. Il faut aussi tester ce que j'avais déjà dit, la lecture écriture dans des fichiers, la rapidité de chargement de sprites/objets3D, la vitesse de création des fenêtres et d'affichage des gadgets etc.. parce-que quand on fait un programme, on utilise pas que la console et un tableau à X milliers de cases :wink:

Sinon pour l'intervention de Freddix, je comprends sont point de vue de mélanger les deux languages car je pense que c'est beaucoup plus simple qu'adapter basicgl, pour des perforamnces très acceptables. Et avec Dark Game SDK ça doit l'être encore plus :D
Le probleme, concernant les fenetre, gadgets, sprite c'est qu'il faudrait pour tester prendre les specificite de chaque language basic, trouver les correspondance des commandes pour que le test soit le plus equitable possible, difficile de faire ca, par contre en ce qui concerne les acces disques, ecriture lecture dans les fichiers, ca depend plus du hard (disque dur, interface) qu'autre chose, ce n'est pas realisable, seul les calculs me semble adapté et donne une idee des perf d'un language, egallement les boucles imbriqués... le sujet est vaste, il n'ya qu'a voir la difference a ce niveau entre les basic testés, perso, j'ai deja desinstallé ibasicpro suite a ces resultas, de toute facon, ce basic est monoplatforme, cela dit si le sujet t'interesse pour la question graphique, soumet un code et je me ferais une joie de tester bien que j'ai uniquement la version demo de pure pour le moment...

:wink:
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message par Oliv »

Coolman a écrit : Le probleme, concernant les fenetre, gadgets, sprite c'est qu'il faudrait pour tester prendre les specificite de chaque language basic, trouver les correspondance des commandes pour que le test soit le plus equitable possible, difficile de faire ca, par contre en ce qui concerne les acces disques, ecriture lecture dans les fichiers, ca depend plus du hard (disque dur, interface) qu'autre chose, ce n'est pas realisable, seul les calculs me semble adapté et donne une idee des perf d'un language, egallement les boucles imbriqués... le sujet est vaste, il n'ya qu'a voir la difference a ce niveau entre les basic testés, perso, j'ai deja desinstallé ibasicpro suite a ces resultas, de toute facon, ce basic est monoplatforme, cela dit si le sujet t'interesse pour la question graphique, soumet un code et je me ferais une joie de tester bien que j'ai uniquement la version demo de pure pour le moment...

:wink:
Pour le code, je vais voir si j'ai le temps, je vais le faire mais pour des comparaisons affichant juste un sprite, on doit pouvoir trouver les même commandes
Pour la lecture écriture, ça dépend du hard mais les tests avec des tableaux aussi, donc si on le fait sur les deux languages sur une même machine, pas de problème, ça sera aussi valable que pour des tests sur des tableaux :wink:
Coolman
Messages : 432
Inscription : sam. 01/janv./2005 16:07

Message par Coolman »

Suite a la remarque d'oliv, je me suis rappele que j'avais fait un petit programme tres simple de bench sur les fichiers il y'a longtemps sous quickbasic, je l'ai retrouvé, c'est du quickbasic assez facile a adapter a pure. je n'ai pas le temps, alors si oliv ou quelqu'un veut le faire, voici le code :

c'est tres rapide avec quicbasic, il faudrait peut augmenter le nombre d'enregistrements crees..

J'ai d'autres codes sous la main en quicbbasic, si ca interesse, je les posterais...

Code : Tout sélectionner

	  Fichier$ = "BENCH.TMP"
	  ELEM% = 32000
	  PRINT "TRANSFERT 32000 ENREGISTREMENTS DE 120 OCTETS EN COURS ..."
	  '                           LECTEUR DISQUE DUR C:
	  Chaine$ = STRING$(120, 65)
	  ' Ecriture
	  DEB# = TIMER
		 OPEN Fichier$ FOR BINARY AS #1
				  FOR i% = 1 TO ELEM%
						PUT #1, , Chaine$
				  NEXT i%
			CLOSE
	  FIN# = TIMER
	  PRINT "ECRITURE 32000 CHAMPS DE 120 OCTETS EFFECTUE EN :";
	  PRINT (FIN# - DEB#)
	  ' Lecture
	  Chaine$ = SPACE$(120)
	  DEB# = TIMER
			OPEN Fichier$ FOR BINARY AS #1
				  FOR i% = 1 TO ELEM%
						GET #1, , Chaine$
				  NEXT i%
			CLOSE
	  FIN# = TIMER
	  PRINT "LECTURE 32000 CHAMPS DE 120 OCTETS EFFECTUE EN :";
	  PRINT (FIN# - DEB#)
	  ' Ici detruit le fichier temporaire cree
	  KILL Fichier$
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message par Oliv »

Voilà

Code : Tout sélectionner

Fichier.s = "BENCH.TMP"
Elem.l = 32000
OpenConsole()
PrintN("TRANSFERT 32000 ENREGISTREMENTS DE 120 OCTETS EN COURS ...")
; LECTEUR DISQUE DUR C:
For i = 0 To 119
  Chaine.s + Chr(65)
Next i
; Ecriture
DEB.l = ElapsedMilliseconds()
CreateFile(0,Fichier)
  For i = 1 To Elem
    WriteString(Chaine)
  Next i
CloseFile(0)
FIN.l = ElapsedMilliseconds()
PrintN("ECRITURE 32000 CHAMPS DE 120 OCTETS EFFECTUE EN :")
PrintN(Str(FIN - DEB))
; Lecture
AllocateMemory(120 * Elem)
DEB.l = ElapsedMilliseconds()
ReadFile(0,Fichier)
  For i = 1 To Elem
    ReadData(@Chaine,120)
  Next i
CloseFile(0)
FIN.l = ElapsedMilliseconds()
PrintN("Lecture 32000 CHAMPS DE 120 OCTETS EFFECTUE EN :")
PrintN(Str(FIN - DEB))
; Ici detruit le fichier temporaire cree
DeleteFile(Fichier)
Input()
CloseConsole()
End
Au niveau du "Get" je ne suis pas sur mais je pense que c'est ça :wink:
Coolman
Messages : 432
Inscription : sam. 01/janv./2005 16:07

Message par Coolman »

Oui, c'est ca, on appelle ce mode stockage et acces binaire sans formatage :wink:

J'ai egallement fait la translation en Blitzbasic, Resultas :

Purebasic :
ECRITURE 32000 CHAMPS DE 120 OCTETS EFFECTUE EN : 88
Lecture 32000 CHAMPS DE 120 OCTETS EFFECTUE EN : 87

Blitzbasic :
ECRITURE 32000 CHAMPS DE 120 OCTETS EFFECTUE EN : 263
Lecture 32000 CHAMPS DE 120 OCTETS EFFECTUE EN : 278

La difference est importante, mais j'ai analysé comment blitzbasic fait le stockage, en fait il ajoute a chaque string ecrit dans le fichier un integer de 4 octects environ qui contient le type et la taille de la chaine stocké ce traitement suplementaire le rend plus lent alors que purebasic stocke la chaine brut a charge pour le programmeur de la recuperer, le code de quickbasic traite egallement le fichier en mode binaire, ca doit exister un acces binaire sous blitz mais la doc est vraiment a chier contrairement a pureb (un point suplementaire a sa charge)...

Voici Les Codes Pour Ceux Qui Veulent Tester :

Le code de quickbasic est plus rapide, mais ce n'est pas etonnant, ca se passe sous dos...


*** Code Quickbasic

Code : Tout sélectionner

     Fichier$ = "C:\BENCH.TMP" 
     ELEM% = 32000 
     PRINT "TRANSFERT 32000 ENREGISTREMENTS DE 120 OCTETS EN COURS ..." 
     '                           LECTEUR DISQUE DUR C: 
     Chaine$ = STRING$(120, 65) 
     ' Ecriture 
     DEB# = TIMER 
       OPEN Fichier$ FOR BINARY AS #1 
              FOR i% = 1 TO ELEM% 
                  PUT #1, , Chaine$ 
              NEXT i% 
         CLOSE 
     FIN# = TIMER 
     PRINT "ECRITURE 32000 CHAMPS DE 120 OCTETS EFFECTUE EN :"; 
     PRINT (FIN# - DEB#) 
     ' Lecture 
     Chaine$ = SPACE$(120) 
     DEB# = TIMER 
         OPEN Fichier$ FOR BINARY AS #1 
              FOR i% = 1 TO ELEM% 
                  GET #1, , Chaine$ 
              NEXT i% 
         CLOSE 
     FIN# = TIMER 
     PRINT "LECTURE 32000 CHAMPS DE 120 OCTETS EFFECTUE EN :"; 
     PRINT (FIN# - DEB#) 
     ' Ici detruit le fichier temporaire cree 
     KILL Fichier$ 
*** Code Purebasic Translaté par Oliv

Code : Tout sélectionner

Fichier.s = "C:\BENCH.TMP" 
Elem.l = 32000 
OpenConsole() 
PrintN("TRANSFERT 32000 ENREGISTREMENTS DE 120 OCTETS EN COURS ...") 
; LECTEUR DISQUE DUR C: 
For i = 0 To 119 
  Chaine.s + Chr(65) 
Next i 
; Ecriture 
DEB.l = ElapsedMilliseconds() 
CreateFile(0,Fichier) 
  For i = 1 To Elem 
    WriteString(Chaine) 
  Next i 
CloseFile(0) 
FIN.l = ElapsedMilliseconds() 
PrintN("ECRITURE 32000 CHAMPS DE 120 OCTETS EFFECTUE EN :") 
PrintN(Str(FIN - DEB)) 
; Lecture 
DEB.l = ElapsedMilliseconds() 
ReadFile(0,Fichier) 
  For i = 1 To Elem 
    ReadData (@Chaine,120)
  Next i 
CloseFile(0) 
FIN.l = ElapsedMilliseconds() 
PrintN("Lecture 32000 CHAMPS DE 120 OCTETS EFFECTUE EN :") 
PrintN(Str(FIN - DEB)) 
; Ici detruit le fichier temporaire cree 
DeleteFile(Fichier) 
Input() 
CloseConsole() 
End 
*** Code Blitzbasic

Code : Tout sélectionner

Fichier$ = "C:\BENCH.TMP" 
Elem% = 32000 
Print "TRANSFERT 32000 ENREGISTREMENTS DE 120 OCTETS EN COURS ..."
; LECTEUR DISQUE DUR C: 
Chaine$=""
For i = 1 To 120 
  Chaine$ = Chaine$ + Chr$(65) 
Next  
; Ecriture 
DEB# = MilliSecs ()
fileout = WriteFile(Fichier$) 
  For i = 1 To Elem% 
    WriteString(fileout,Chaine$) 
  Next  
CloseFile(fileout) 
FIN# = MilliSecs ()
Print "ECRITURE 32000 CHAMPS DE 120 OCTETS EFFECTUE EN :"
Print Str$(FIN - DEB) 
; Lecture 
DEB# = MilliSecs ()
filein = ReadFile(Fichier$) 
  For i = 1 To Elem% 
		Chaine$=ReadString$(filein)     
  Next  
CloseFile(filein) 
FIN# = MilliSecs ()
Print "Lecture 32000 CHAMPS DE 120 OCTETS EFFECTUE EN :"
Print (Str$(FIN - DEB)) 
; Ici detruit le Fichier$ temporaire cree 
DeleteFile Fichier$
WaitKey() 
End 
Coolman
Messages : 432
Inscription : sam. 01/janv./2005 16:07

Message par Coolman »

Curieux de voir le resultas avec bcx, j'ai modifié le code, ensuite effectué la translation en C, Voici le resultas :

ECRITURE 32000 CHAMPS DE 120 OCTETS EFFECTUE EN : 57
LECTURE 32000 CHAMPS DE 120 OCTETS EFFECTUE EN : 26

On voit la puissance du C, j'ai juste modifié la fonction timer du code source de bcx et je l'ai recompilé pour qu'il me donne avec la fonction timer un resultas en millisecond, par defaut c'est en seconde (une simple division que j'ai desactivé)...


*** Code BCX

Code : Tout sélectionner

DIM DEB#
DIM FIN#
DIM Chaine$, Fichier$
DIM i%
DIM ELEM%

Fichier$ = "C:\BENCH.TMP"
ELEM% = 32000
PRINT "TRANSFERT 32000 ENREGISTREMENTS DE 120 OCTETS EN COURS ..."
'                           LECTEUR DISQUE DUR C:
Chaine$ = STRING$(120, 65)
' Ecriture
DEB# = TIMER
OPEN Fichier$ FOR BINARY NEW AS fp1
  FOR i% = 1 TO ELEM%
    PUT$ fp1,Chaine$,Len(Chaine$)       
  NEXT i%
CLOSE fp1
FIN# = TIMER
PRINT "ECRITURE 32000 CHAMPS DE 120 OCTETS EFFECTUE EN :";
PRINT FIN# - DEB#
' Lecture
Chaine$ = SPACE$(120)
DEB# = TIMER
OPEN Fichier$ FOR BINARY AS fp1
  FOR i% = 1 TO ELEM%
    GET$ fp1,Chaine$,120      
  NEXT i%
CLOSE fp1
FIN# = TIMER
PRINT "LECTURE 32000 CHAMPS DE 120 OCTETS EFFECTUE EN :";
PRINT FIN# - DEB#
' Ici detruit le fichier temporaire cree
KILL Fichier$
While inkey$="" : Wend
End


*** Translation En C ***


// *************************************************************
//   Created with BCX -- The BASIC To C Translator (ver 4.76)
//  BCX (c) 1999, 2000, 2001, 2002, 2003, 2004 by Kevin Diggins
// *************************************************************
//     Translated for compiling using the Lcc-Win32 Compiler
// *************************************************************
#include <windows.h>    // Win32 Header File 
#include <windowsx.h>   // Win32 Header File 
#include <commctrl.h>   // Win32 Header File 
#include <mmsystem.h>   // Win32 Header File 
#include <shellapi.h>   // Win32 Header File 
#include <shlobj.h>     // Win32 Header File 
#include <richedit.h>   // Win32 Header File 
#include <wchar.h>      // Win32 Header File 
#include <objbase.h>    // Win32 Header File 
#include <ocidl.h>      // Win32 Header File 
#include <winuser.h>    // Win32 Header File 
#include <olectl.h>     // Win32 Header File 
#include <oaidl.h>      // Win32 Header File 
#include <ole2.h>       // Win32 Header File 
#include <oleauto.h>    // Win32 Header File 
#include <conio.h>
#include <direct.h>
#include <ctype.h>
#include <io.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
#include <stddef.h>
#include <stdlib.h>
#include <setjmp.h>
#include <time.h>
#include <stdarg.h>
#include <process.h>

// *************************************************
//                System Variables
// *************************************************


// *************************************************
//            User Global Variables
// *************************************************

static double  DEB;
static double  FIN;
static char    Chaine[2048];
static char    Fichier[2048];
static int     i;
static int     ELEM;
static FILE*  fp1;



// *************************************************
//               Standard Macros
// *************************************************

#define GET(A,B,C)fread(B,1,C,A)
#define PUT(A,B,C)fwrite(B,1,C,A)


// *************************************************
//               Standard Prototypes
// *************************************************

char*   BCX_TmpStr(size_t);
char*   string (int,int);
char*   space (int a);
char*   inkey (void);
float   timer (void);

// *************************************************
//                  Main Program
// *************************************************

int main(int argc, char *argv[])
{
  strcpy(Fichier,"C:\\BENCH.TMP");
  ELEM=32000;
  printf("%s\n","TRANSFERT 32000 ENREGISTREMENTS DE 120 OCTETS EN COURS ...");
  //                            LECTEUR DISQUE DUR C: 
  strcpy(Chaine,(char*)string(120,65));
  //  Ecriture 
  DEB=timer();
  if((fp1=fopen(Fichier,"wb+"))==0)
   {
  fprintf(stderr,"Can't open file %s\n",Fichier);exit(1);
   }
  for(i=1; i<=ELEM; i+=1)
    {
      PUT(fp1,Chaine,strlen(Chaine));
    }
  if(fp1)
   {
     fflush(fp1);
     fclose(fp1);
   }
  FIN=timer();
  printf("%s","ECRITURE 32000 CHAMPS DE 120 OCTETS EFFECTUE EN :");
  printf("% .15G\n",(double)FIN-DEB);
  //  Lecture 
  strcpy(Chaine,(char*)space(120));
  DEB=timer();
  if((fp1=fopen(Fichier,"rb+"))==0)
   {
  fprintf(stderr,"Can't open file %s\n",Fichier);exit(1);
   }
  for(i=1; i<=ELEM; i+=1)
    {
      GET(fp1,Chaine,120);
    }
  if(fp1)
   {
     fflush(fp1);
     fclose(fp1);
   }
  FIN=timer();
  printf("%s","LECTURE 32000 CHAMPS DE 120 OCTETS EFFECTUE EN :");
  printf("% .15G\n",(double)FIN-DEB);
  //  Ici detruit le fichier temporaire cree 
  DeleteFile (Fichier);
  while(inkey()[0]==0)
    {
    }
  fflush(stdout);
  ExitProcess(0);
  return 0;   //  End of main program
}

// *************************************************
//                 Run Time Functions
// *************************************************

char *BCX_TmpStr (size_t Bites)
{
  static int   StrCnt;
  static char *StrFunc[2048];
  StrCnt=(StrCnt + 1) & 2047;
  if(StrFunc[StrCnt]) free (StrFunc[StrCnt]);
  return StrFunc[StrCnt]=(char*)calloc(Bites+128,sizeof(char));
}


char *string (int count, int a)
{
  register char *strtmp = BCX_TmpStr(count);
  memset (strtmp,a,count);
  return strtmp;
}


char *space (int a)
{
  register char *strtmp = BCX_TmpStr(a);
  memset (strtmp,32,a);
  return strtmp;
}


char* inkey(void)
{
  char *strtmp = BCX_TmpStr(2);
  if (kbhit())
   {
     int asccodereturn = getch();
     strtmp[0] = asccodereturn;
     strtmp[1] = 0;
   }
  return strtmp;
}


float timer (void)
{
  float tmp2;
  int   tmp;
  tmp = GetTickCount();
  tmp2 = tmp/1000.0;
  return tmp;
}
freddix
Messages : 101
Inscription : dim. 08/févr./2004 19:37

Message par freddix »

@Coolman :
A la base, je trouve DBPro très intéressant car facile. Mais la couche logicielle de gestion des structures du basic est trop lente .. Résultat j'utilise le purebasic [ qui est beaucoup + rapide :) ] pour appeler plusieurs fonctions de DBPro d'affilée et gagner du temps de calcul en zappant du coup la couche logicielle ... résultat mon frame rate est beaucoup + élevé [ presque 300% ] que le même moteur de jeu entièrement codé avec DBPro.

Maintenant, il y a DarkGameSDK qui est le moteur de DBPro mais sans la couche logicielle de gestion des structures du BASIC. DarkGame SDK est développé pour être utilisé en C++. Je suis en train de bosser sur l'adaptation de ses .LIB au purebasic car, grâce à cela, je garderais la simplicité de DBPro et cela entièrement intégré au purebasic :)
La, j'aurais mon moteur de jeu complet entièrement en purebasic sans avoir besoin de DBPro ;)

Sinon pour notes sur d'autres messages du post que j'ai vu :
DBv1 = Langage interprété
DBPro = Langage COMPILE
Coolman
Messages : 432
Inscription : sam. 01/janv./2005 16:07

Message par Coolman »

freddix a écrit :@Coolman :
A la base, je trouve DBPro très intéressant car facile. Mais la couche logicielle de gestion des structures du basic est trop lente .. Résultat j'utilise le purebasic [ qui est beaucoup + rapide :) ] pour appeler plusieurs fonctions de DBPro d'affilée et gagner du temps de calcul en zappant du coup la couche logicielle ... résultat mon frame rate est beaucoup + élevé [ presque 300% ] que le même moteur de jeu entièrement codé avec DBPro.

Maintenant, il y a DarkGameSDK qui est le moteur de DBPro mais sans la couche logicielle de gestion des structures du BASIC. DarkGame SDK est développé pour être utilisé en C++. Je suis en train de bosser sur l'adaptation de ses .LIB au purebasic car, grâce à cela, je garderais la simplicité de DBPro et cela entièrement intégré au purebasic :)
La, j'aurais mon moteur de jeu complet entièrement en purebasic sans avoir besoin de DBPro ;)

Sinon pour notes sur d'autres messages du post que j'ai vu :
DBv1 = Langage interprété
DBPro = Langage COMPILE
C'est tres cool ca, donc il sera possible d'utiliser ta lib pour pureb sans posseder dbpro, est ce que ta lib sera opensource ou commercial ?


*******************************
J'ai egallement adapté mon premier test pour bcx :

Boucle Calcul Deux Variables 32000
Fois 1000 Fois De Suite

Dans L'ordre, Bcx -- Blitzbasic -- Purebasic
Boucle Calcul Deux Variables 32000
Fois 1000 Fois De Suite

CALCUL SUR DES NOMBRES ENTIERS

ADDITION : 92 -- 75 -- 809
SOUSTRACTION : 73 -- 75 -- 810
MULTIPLICATION : 75 -- 75 -- 855
DIVISION : 725 -- 744 -- 1196

CALCUL SUR DES NOMBRES REELS

ADDITION : 76 -- 213 -- 807
SOUSTRACTION : 72 -- 215 -- 809
MULTIPLICATION : 75 -- 219 -- 805
DIVISION : 525 -- 471 -- 930

Attention, pour purebasic, il ne faut pas tenir compte de ces resultas car le debug est activé. pour ibaspro, je l'ai desinstallé et je ne me rappelle pas vraiment les resultas en tous cas moins bon (deja posté)...

' *** CODE BCX ***

Code : Tout sélectionner

DIM Boucle%
DIM GloBoucle%
DIM res%
DIM V1%
DIM V2%
DIM DEB#
DIM FIN#
DIM CALC#
DIM res2#
DIM V12#
DIM V22#
DIM i%
DIM n%

Boucle% = 32000
GloBoucle% = 1000

Print "Boucle Calcul Deux Variables 32000"
Print "Fois 1000 Fois De Suite"
'-------------------------------------------------------------------------------
'                    CALCUL SUR LES ENTIERS
'
'******  MODULE TEST  ********************************************************
Print
Print
Print "CALCUL SUR DES NOMBRES ENTIERS"
Print
res% = 0: V1% = 250: V2% = 100
	  DEB# = TIMER 
	  For n% = 1 To GloBoucle%
	  For i% = 1 To Boucle%
			res% = V1% + V2%
	  Next
	  Next
	  FIN# = TIMER
CALC# = int(FIN# - DEB#)
Print "ADDITION       : "+Str$(CALC#)
'******  MODULE TEST  ********************************************************

res% = 0: V1% = 250: V2% = 100
	  DEB# = TIMER
	  For n% = 1 To GloBoucle%
	  For i% = 1 To Boucle%
			res% = V1% - V2%
	  Next
	  Next
	  FIN# = TIMER
CALC# = int(FIN# - DEB#)
Print "SOUSTRACTION   : "+Str$(CALC#)
'******  MODULE TEST  ********************************************************
res% = 0: V1% = 250: V2% = 100
	  DEB# = TIMER
	  For n% = 1 To GloBoucle%
	  For i% = 1 To Boucle%
			res% = V1% * V2%
	  Next
	  Next
	  FIN# = TIMER
CALC# = int(FIN# - DEB#)
Print "MULTIPLICATION : "+Str$(CALC#)
'******  MODULE TEST  ********************************************************
res% = 0: V1% = 250: V2% = 100
	  DEB# = TIMER
	  For n% = 1 To GloBoucle%
	  For i% = 1 To Boucle%
			res% = V1% / V2%
	  Next
	  Next
	  FIN# = TIMER
CALC# = int(FIN# - DEB#)
Print "DIVISION       : "+Str$(CALC#)
'-------------------------------------------------------------------------------
'                    CALCUL SUR LES REELS
Print
Print
Print "CALCUL SUR DES NOMBRES REELS"
Print
res2# = 0: V12# = 250: V22# = 100
	  DEB# = TIMER
	  For n% = 1 To GloBoucle%
	  For i% = 1 To Boucle%
			res2# = V12# + V22#
	  Next
	  Next
	  FIN# = TIMER
CALC# = int(FIN# - DEB#)
Print "ADDITION       : "+Str$(CALC#)
'******  MODULE TEST  ********************************************************
res2# = 0: V12# = 250: V22# = 100
	  DEB# = TIMER
	  For n% = 1 To GloBoucle%
	  For i% = 1 To Boucle%
			res2# = V12# - V22#
	  Next
	  Next
	  FIN# = TIMER
CALC# = int(FIN# - DEB#)
Print "SOUSTRACTION   : "+Str$(CALC#)
'******  MODULE TEST  ********************************************************
res2# = 0: V12# = 250: V22# = 100
	  DEB# = TIMER
	  For n% = 1 To GloBoucle%
	  For i% = 1 To Boucle%
			res2# = V12# * V22#
	  Next
	  Next
	  FIN# = TIMER
CALC# = int(FIN# - DEB#)
Print "MULTIPLICATION : "+Str$(CALC#)
'******  MODULE TEST  ********************************************************
res2# = 0: V12# = 250: V22# = 100
	  DEB# = TIMER
	  For n% = 1 To GloBoucle%
	  For i% = 1 To Boucle%
			res2# = V12# / V22#
	  Next
	  Next
	  FIN# = TIMER
CALC# = int(FIN# - DEB#)
Print "DIVISION       : "+Str$(CALC#)
While inkey$="" : Wend
End

*** Translaté En C ***

// *************************************************************
//   Created with BCX -- The BASIC To C Translator (ver 4.76)
//  BCX (c) 1999, 2000, 2001, 2002, 2003, 2004 by Kevin Diggins
// *************************************************************
//     Translated for compiling using the Lcc-Win32 Compiler
// *************************************************************
#include <windows.h>    // Win32 Header File 
#include <windowsx.h>   // Win32 Header File 
#include <commctrl.h>   // Win32 Header File 
#include <mmsystem.h>   // Win32 Header File 
#include <shellapi.h>   // Win32 Header File 
#include <shlobj.h>     // Win32 Header File 
#include <richedit.h>   // Win32 Header File 
#include <wchar.h>      // Win32 Header File 
#include <objbase.h>    // Win32 Header File 
#include <ocidl.h>      // Win32 Header File 
#include <winuser.h>    // Win32 Header File 
#include <olectl.h>     // Win32 Header File 
#include <oaidl.h>      // Win32 Header File 
#include <ole2.h>       // Win32 Header File 
#include <oleauto.h>    // Win32 Header File 
#include <conio.h>
#include <direct.h>
#include <ctype.h>
#include <io.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
#include <stddef.h>
#include <stdlib.h>
#include <setjmp.h>
#include <time.h>
#include <stdarg.h>
#include <process.h>

// *************************************************
//                System Variables
// *************************************************


// *************************************************
//            User Global Variables
// *************************************************

static int     Boucle;
static int     GloBoucle;
static int     res;
static int     V1;
static int     V2;
static double  DEB;
static double  FIN;
static double  CALC;
static double  res2;
static double  V12;
static double  V22;
static int     i;
static int     n;



// *************************************************
//               Standard Macros
// *************************************************

#define FINT(a)floor(a)


// *************************************************
//               Standard Prototypes
// *************************************************

char*   BCX_TmpStr(size_t);
char*   str (double);
char*   join (int, ... );
char*   inkey (void);
float   timer (void);

// *************************************************
//                  Main Program
// *************************************************

int main(int argc, char *argv[])
{
  //  *** CODE BCX *** 
  Boucle=32000;
  GloBoucle=1000;
  printf("%s\n","Boucle Calcul Deux Variables 32000");
  printf("%s\n","Fois 1000 Fois De Suite");
  // ------------------------------------------------------------------------------- 
  //                     CALCUL SUR LES ENTIERS 
  //  
  // ******  MODULE TEST  ******************************************************** 
  printf("\n");
  printf("\n");
  printf("%s\n","CALCUL SUR DES NOMBRES ENTIERS");
  printf("\n");
  res=0;
  V1=250;
  V2=100;
  DEB=timer();
  for(n=1; n<=GloBoucle; n+=1)
    {
      for(i=1; i<=Boucle; i+=1)
        {
          res=V1+V2;
        }
    }
  FIN=timer();
  CALC=FINT(FIN-DEB);
  printf("%s%s\n","ADDITION       : ",str( CALC ) );
  // ******  MODULE TEST  ******************************************************** 
  res=0;
  V1=250;
  V2=100;
  DEB=timer();
  for(n=1; n<=GloBoucle; n+=1)
    {
      for(i=1; i<=Boucle; i+=1)
        {
          res=V1-V2;
        }
    }
  FIN=timer();
  CALC=FINT(FIN-DEB);
  printf("%s%s\n","SOUSTRACTION   : ",str( CALC ) );
  // ******  MODULE TEST  ******************************************************** 
  res=0;
  V1=250;
  V2=100;
  DEB=timer();
  for(n=1; n<=GloBoucle; n+=1)
    {
      for(i=1; i<=Boucle; i+=1)
        {
          res=V1*V2;
        }
    }
  FIN=timer();
  CALC=FINT(FIN-DEB);
  printf("%s%s\n","MULTIPLICATION : ",str( CALC ) );
  // ******  MODULE TEST  ******************************************************** 
  res=0;
  V1=250;
  V2=100;
  DEB=timer();
  for(n=1; n<=GloBoucle; n+=1)
    {
      for(i=1; i<=Boucle; i+=1)
        {
          res=V1/V2;
        }
    }
  FIN=timer();
  CALC=FINT(FIN-DEB);
  printf("%s%s\n","DIVISION       : ",str( CALC ) );
  // ------------------------------------------------------------------------------- 
  //                     CALCUL SUR LES REELS 
  printf("\n");
  printf("\n");
  printf("%s\n","CALCUL SUR DES NOMBRES REELS");
  printf("\n");
  res2=0;
  V12=250;
  V22=100;
  DEB=timer();
  for(n=1; n<=GloBoucle; n+=1)
    {
      for(i=1; i<=Boucle; i+=1)
        {
          res2=V12+V22;
        }
    }
  FIN=timer();
  CALC=FINT(FIN-DEB);
  printf("%s%s\n","ADDITION       : ",str( CALC ) );
  // ******  MODULE TEST  ******************************************************** 
  res2=0;
  V12=250;
  V22=100;
  DEB=timer();
  for(n=1; n<=GloBoucle; n+=1)
    {
      for(i=1; i<=Boucle; i+=1)
        {
          res2=V12-V22;
        }
    }
  FIN=timer();
  CALC=FINT(FIN-DEB);
  printf("%s%s\n","SOUSTRACTION   : ",str( CALC ) );
  // ******  MODULE TEST  ******************************************************** 
  res2=0;
  V12=250;
  V22=100;
  DEB=timer();
  for(n=1; n<=GloBoucle; n+=1)
    {
      for(i=1; i<=Boucle; i+=1)
        {
          res2=V12*V22;
        }
    }
  FIN=timer();
  CALC=FINT(FIN-DEB);
  printf("%s%s\n","MULTIPLICATION : ",str( CALC ) );
  // ******  MODULE TEST  ******************************************************** 
  res2=0;
  V12=250;
  V22=100;
  DEB=timer();
  for(n=1; n<=GloBoucle; n+=1)
    {
      for(i=1; i<=Boucle; i+=1)
        {
          res2=V12/V22;
        }
    }
  FIN=timer();
  CALC=FINT(FIN-DEB);
  printf("%s%s\n","DIVISION       : ",str( CALC ) );
  while(inkey()[0]==0)
    {
    }
  fflush(stdout);
  ExitProcess(0);
  return 0;   //  End of main program
}

// *************************************************
//                 Run Time Functions
// *************************************************

char *BCX_TmpStr (size_t Bites)
{
  static int   StrCnt;
  static char *StrFunc[2048];
  StrCnt=(StrCnt + 1) & 2047;
  if(StrFunc[StrCnt]) free (StrFunc[StrCnt]);
  return StrFunc[StrCnt]=(char*)calloc(Bites+128,sizeof(char));
}


char *str (double d)
{
  register char *strtmp = BCX_TmpStr(16);
  sprintf(strtmp,"% .15G",d);
  return strtmp;
}


char * join(int n, ...)
{
  register int i = n, tmplen = 0;
  register char *s_;
  register char *strtmp = 0;
  va_list marker;
  va_start(marker, n); // Initialize variable arguments
  while(i-- > 0)
  {
    s_ = va_arg(marker, char *);
    tmplen += strlen(s_);
  }
  strtmp = BCX_TmpStr(tmplen);
  va_end(marker); // Reset variable arguments
  i = n;
  va_start(marker, n); // Initialize variable arguments
  while(i-- > 0)
  {
    s_ = va_arg(marker, char *);
    strtmp = strcat(strtmp, s_);
  }
  va_end(marker); // Reset variable arguments
  return strtmp;
}


char* inkey(void)
{
  char *strtmp = BCX_TmpStr(2);
  if (kbhit())
   {
     int asccodereturn = getch();
     strtmp[0] = asccodereturn;
     strtmp[1] = 0;
   }
  return strtmp;
}


float timer (void)
{
  float tmp2;
  int   tmp;
  tmp = GetTickCount();
  tmp2 = tmp/1000.0;
  return tmp;
}
freddix
Messages : 101
Inscription : dim. 08/févr./2004 19:37

Message par freddix »

C'est tres cool ca, donc il sera possible d'utiliser ta lib pour pureb sans posseder dbpro, est ce que ta lib sera opensource ou commercial ?
Ce n'est pas "MA" lib mais une lib développée par les développeurs de DarkBasicPro.. Elle est payante :(
Coolman
Messages : 432
Inscription : sam. 01/janv./2005 16:07

Message par Coolman »

freddix a écrit :
C'est tres cool ca, donc il sera possible d'utiliser ta lib pour pureb sans posseder dbpro, est ce que ta lib sera opensource ou commercial ?
Ce n'est pas "MA" lib mais une lib développée par les développeurs de DarkBasicPro.. Elle est payante :(
Je m'en doutais un peu :( , Dommage...
Répondre