Librairie Effect

Vous avez développé un logiciel en PureBasic et vous souhaitez le faire connaitre ?
Avatar de l’utilisateur
ZapMan
Messages : 460
Inscription : ven. 13/févr./2004 23:14
Localisation : France
Contact :

Message par ZapMan »

Mais comme on a pu le constater à travers plusieurs exemples, il faut que le codeur ASM soit trés bon pour réussir à pondre un code plus performant que celui issu du compilateur PureBasic.

@Soldat : merci pour ton travail, tu es décidément trés productif !
Tout obstacle est un point d'appui potentiel.

Bibliothèques PureBasic et autres codes à télécharger :https://www.editions-humanis.com/downlo ... ads_FR.htm
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

Nouvelle version ;)

J'ai ajouté 2 fonctions pour
- Mélanger 2 couleurs, utile pour faire un dégradé
- Ajouter 2 couleurs (pour par exemple affiché une image sur une autre avec un effet de fondu)
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Liet_Kynes
Messages : 12
Inscription : ven. 20/août/2004 11:00

Message par Liet_Kynes »

Vraiment sympa
tu pourrais p'tre pondre un truc vraiment bon pour la gestion des lumières, continue ^^

j'avais pas mal bossé sur la gestion des trajectoires et orientations des entités&caméra, pour un projet de jeu 3d que j'ai jamais fini; et ton code me donne l'idée de mettre mes travaux dans une dll (en fait c'est même en lisant ton code que je viens de comprendre comment faire une dll lol) en fait Le Soldat m'as inspiré =)
J'ai deux commandes en tête:
FollowEntity(): Camera qui suit une entité, a la manière d'un jeu a la 3e personne, on peut gerer la souplesse de la camera dans son déplacement, son angle par rapport a l'entité, la hauteur et son temps de réaction. le seul prob est qu'il ya pas de collision avec le décor ou les mesh, donc ca marche bien qu'a l'exterieur pour l'instant...
EntityFocus(): Commande pour gerer l'orientation de l'objet vers un point, en fonction des axes.

J'en reparlerais au moment venu, et bravo Le soldat =)
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

Bon, j'ai mis en place la rotation et la symétrie d'image

La librairie s'appelle Effect (penser à supprimer l'ancienne qui s'apelle ColorEffect) et elle est dispo sur mon site.

voici la rapidité du bazar avec une image de 1000 * 1000 pixels sur un 900mhz :
- 230 ms pour la symétrie
- 266 ms pour la rotation

je pense que c'est très honnête comme vitesse :D
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Polo
Messages : 612
Inscription : sam. 03/juil./2004 20:14

Message par Polo »

Salut !
Je serais intéressé d'avoir la source de la commande GetImageBits, j'en ai besoin pour la librairie que je suis en train de faire, et ça m'embête de devoir inclure une autre librairie dans la mienne (ça devient le foutoir pour installer la librairie après ;))
Merci !
Gaetan
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Polo
Messages : 612
Inscription : sam. 03/juil./2004 20:14

Message par Polo »

Ben, je me trompe peut être, mais sur ta page il n'y a que SetImagebits et pas getimagebits, non ?
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

ah oui tiens :lol:

Code : Tout sélectionner

ProcedureDLL.l GetImageBits(ImageID, HList) ; Transfert d'une image vers un tableau
  Protected bmi.BITMAPINFO, Hdc.l, Resultat, Mem, n, nn, bm.BITMAP
  
  Resultat = 0
  
  GetObject_(ImageID, SizeOf(BITMAP), @bm.BITMAP)
  
  bmi\bmiHeader\biSize = SizeOf(BITMAPINFOHEADER)
  bmi\bmiHeader\biWidth = bm\bmWidth
  bmi\bmiHeader\biHeight = bm\bmHeight
  bmi\bmiHeader\biPlanes = 1
  bmi\bmiHeader\biBitCount = 32
  bmi\bmiHeader\biCompression = #BI_RGB
  
  Mem = AllocateMemory(bm\bmWidth * bm\bmHeight * 4)
  If Mem
    
    Hdc = CreateCompatibleDC_(GetDC_(ImageID)) 
      If Hdc
        GetDIBits_(Hdc, ImageID, 0, bm\bmHeight, Mem, @bmi, #DIB_RGB_COLORS) ; on envoie la liste dans l'image
        ReleaseDC_(0, Hdc)
      Resultat = ImageID
    EndIf
    
    ; On convertit la liste dans le bon format
    For n = 0 To bm\bmHeight - 1
      For nn = 0 To bm\bmWidth - 1
        CopyMemory(Mem + nn * 4 + (bm\bmHeight - 1 - n) * bm\bmWidth * 4 + 2, HList + n * 4 + nn * bm\bmHeight * 4, 1)
        CopyMemory(Mem + nn * 4 + (bm\bmHeight - 1 - n) * bm\bmWidth * 4 + 1, HList + n * 4 + nn * bm\bmHeight * 4 + 1, 1)
        CopyMemory(Mem + nn * 4 + (bm\bmHeight - 1 - n) * bm\bmWidth * 4, HList + n * 4 + nn * bm\bmHeight * 4 + 2, 1)
      Next
    Next
    
    FreeMemory(Mem)
  EndIf
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Polo
Messages : 612
Inscription : sam. 03/juil./2004 20:14

Message par Polo »

merci beaucoup ! 8)
bernard13
Messages : 1221
Inscription : mer. 05/janv./2005 21:30

Message par bernard13 »

et la couleur sur les gadgets dans quel version ?
la version 213000
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

c'est pas le but de cette librairie

ici, je parle traitement di'mages :wink:
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
barnierchristophe
Messages : 64
Inscription : lun. 07/févr./2005 11:18

D'où sortent les procédures CreateCompatibleDC GetDIBits ...

Message par barnierchristophe »

Très interressant tout çà. Pour ma gouverne, et puisque je commence à m'y plonger, d'où sortent les fonctions du type, GetObject_ ,CreateCompatibleDC_ ,GetDIBits_ , ReleaseDC_ ( je ne les trouve pas dans l'aide incluse de PureBasic)
Où puis-je trouver un descriptif succint.. Merci :roll:
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Ce ne sont pas des fonctions de Pure mais des fonctions API de window (fonctions contenues dans les Dll de window), la plupart sont prédéclarées dans PureBasic de sorte que l'on a pas à charger la librairie.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

Bon, une nouvelle fonction dans la lib qui permet de faire des rotation d'image avec n'importe quel angle

27°
98°
etc ...

Le tout avec de l'antialiazing (du lissage si vous préférez)

Aperçu des fonctions de rotation et de symétrie
Image
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

Flype a écrit :ceci dit peut etre rentrerais tu en "concurrence" avec d'autres userlib existentes faite en ASM
il me semble bien qu'il en existe... je v voir...

vu sur purearea.net :
lib "effects" http://www.purearea.net/pb/download/use ... ffects.zip
lib "rotation" http://www.purearea.net/pb/download/use ... ations.zip
lib "X2D" http://www.purearea.net/pb/download/userlibs/X2D.zip

essaye et juge par toi meme
ta lib resterais cohérente en y rajoutant du traitement d'images
Tiens j'ai essayé les libs données par Flype précédemment

Pour une rotation de 90° d'une image de 1000*1000pixels sur un 900 mhz

ma lib : 240 ms
Lib Rotations : 500 ms (y'a pas de symétrie d'image la dedans) et elle est lente car elle travaille avec tous les angles (comme je viens de le faire mais sans lissage)

Pour la lib effects donnée par Flyppe, c'est idem que moi car elle utilise les mêmes fonctions :wink:

la X2D pas essayé


Du coup, je demande si il ne serai pas interressant d'optimiser avec de l'assembleur ma lib.
Est-ce que des pros de l'assembleur seraient partant ?

Si oui, je balance le code et on optimise tout ça :D
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Répondre