Buffer supplémentaire

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
bombseb
Messages : 445
Inscription : jeu. 25/août/2005 22:59
Localisation : 974
Contact :

Buffer supplémentaire

Message par bombseb »

Bonjour,

J'aimerais avoir un buffer supplémentaire pour y mettre un logo afin d'utiliser le buffer invisible de l'écran pour afficher le logo déformé et pour pouvoir faire un flipbuffers apres... est-ce que vous savez comment faire svp ?
bombseb
Messages : 445
Inscription : jeu. 25/août/2005 22:59
Localisation : 974
Contact :

Message par bombseb »

c'est bon j'ai trouvé comment faire... je passe par un tableau de variables
bombseb
Messages : 445
Inscription : jeu. 25/août/2005 22:59
Localisation : 974
Contact :

Message par bombseb »

mais je ne sais pas si c'est mieux de passer par une zone mémoire / pointeur
quelqu'un peut me dire ?
fweil
Messages : 505
Inscription : dim. 16/mai/2004 17:50
Localisation : Bayonne (64)
Contact :

Message par fweil »

Si tu passes par un tableau, l'indiçage x, y est facile, c'est le compilateur qui se débrouille pour calculer l'adresse.

Si tu utilises un buffer, il faut que tu calcules toi même les pointeurs pour associer un mot de 32 bits, par exemple, à une coordonnée x, y de l'image.

En général quand on cherche à optimiser les performances, l'utilisation d'un buffer est plus rapide, on peut gagner une ou deux instructions machine par itération lors du remplissage du buffer par rapport à un tableau. Mais cela peut aussi poser des problèmes inattendus.

Disons que l'utilisation d'un tableau est plus directement applicable pour transformer ou intervenir sur copie d'une image.
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

une solution consiste a utiliser les sprites !

tu dessine sur un sprite de la taille de l'ecran pendant que tu en montre un autre !
en purebasic c'est la solution la plus evidente , puisque l'on peut utiliser les sprites a la place de l'ecran !! et en plus c'est tres rapide ! ... :)

ou bien une image :

Code : Tout sélectionner

 LoadFont(1, "arial", 50 )
LoadFont(2, "arial", 50 )
UseFont(1)
Resultat = InitSprite()
Global Angle,amplitude
amplitude=10
Texte.s="Le Lac d'annecy !"





WindowID = OpenWindow(1, 50, 50, 640, 200,  #PB_Window_SystemMenu|#PB_Window_MinimizeGadget  , "hello")
WindowID = WindowID(1)
OpenWindowedScreen(WindowID, 0, 0, 640, 200, 1, 0, 0)

CreateImage(100, 640, 100)
StartDrawing( ImageOutput())
FrontColor($0,$FF,$FF)
BackColor(0, 0, 0)

UseFont(1)
DrawingFont(FontID())
DrawingMode(1)
Locate(0, 0)
DrawText(Texte.s)
StopDrawing()

For t=0 To 100
    GrabImage(100, t, 0, t, 640,1)
Next t
   
Repeat
    
    For y= 0 To 100 
        
        StartDrawing( ScreenOutput())
        UseFont(2)
        DrawingFont(FontID())
        DrawingMode(1)
        
        FrontColor($95,$25,$BA)
        BackColor(0, 0, 0)
        Locate(40, 0)
        DrawText(Texte.s)
        
        
        
        
        angle+1 :If angle=360*10: angle=0 :EndIf
        x=1+(Sin(angle*2*3.1415926/50)* amplitude)
        DrawImage( UseImage(y), x+40, y+20*x/25+50,640,1)
        StopDrawing()
        dep+1 :If dep>640 :dep=-100:EndIf
        
    Next y
    
    
    FlipBuffers(50)
    
    ClearScreen(0, 0, 0)
    Event=WindowEvent()
    Delay(1)
    
    
Until Event=#PB_Event_CloseWindow


bombseb
Messages : 445
Inscription : jeu. 25/août/2005 22:59
Localisation : 974
Contact :

Message par bombseb »

hum interressant tout ca...

les sprites j'ai pas encore trop testé...mais c'est pas bête faut que je teste ca...
bombseb
Messages : 445
Inscription : jeu. 25/août/2005 22:59
Localisation : 974
Contact :

Message par bombseb »

Dobro, ta technique est vraiment bien seulement on ne peut pas utiliser de grabsprite sur un sprite...
comment tu ferais toi pour avoir un 2eme buffer graphique invisible sur lequel toutes les fonctions (2D, fonctions de sprites) seraient disponibles ??
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

avec UseBuffer(#Sprite) tu peux pas faire un grab sur le sprite #Sprite ? (j'ai pas testé)

Dri
bombseb
Messages : 445
Inscription : jeu. 25/août/2005 22:59
Localisation : 974
Contact :

Message par bombseb »

ah bon ??
alors je vais tester ca tout de suite car je suis vraiment bloqué là....
bombseb
Messages : 445
Inscription : jeu. 25/août/2005 22:59
Localisation : 974
Contact :

Message par bombseb »

je viens de tester ceci avec ta technique du usebuffer(#sprite) et la réaction est vraiment bizarre...

Code : Tout sélectionner

If InitSprite () = 0 
  MessageRequester ("Erreur", "Impossible d'initialiser directx", #PB_MessageRequester_Ok) 
  End 
EndIf 

; ---------- Mode fenetré ---------- 

; -------- Fenêtre principale -------- 
#WindowWidth    = 400 
#WindowHeight   = 300 
hWnd = OpenWindow(0, 0, 0, #WindowWidth, #WindowHeight, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "YEAH !") 
If hWnd = 0 
  MessageRequester ("Erreur", "Impossible d'ouvrir l'écran", #PB_MessageRequester_Ok) 
  End 
EndIf 

If OpenWindowedScreen(hWnd, 0, 0, #WindowWidth, #WindowHeight, 1, 0, 0) = 0 
  MessageRequester ("Erreur", "Impossible d'ouvrir l'écran", #PB_MessageRequester_Ok) 
  End 
EndIf 
; ------------------------------------ 

UsePNGImageDecoder()


ClearScreen(0,0,0) 

If LoadSprite (1, "purebasiclogonew.png") = 0 
  MessageRequester ("Erreur", "Le sprite n'a pas pu etre chargé !") 
  End 
EndIf 

UseBuffer(1) 
GrabSprite (2, 0, 0,100,100) 
UseBuffer(-1) 

DisplaySprite(2,1,1) 
FlipBuffers() 


Repeat 
  ExamineKeyboard () 
Until KeyboardPushed (#PB_Key_Escape) Or WindowEvent() = #PB_Event_CloseWindow 

End 


en gros je load un sprite, j'en capture une petite partie avec un grabsprite puis j'affiche cette partie dans le buffer, puis flipbuffers()

c'est normal cette réaction ????!! j'ai oublié quelque chose ??

EDIT : correction du code
Dernière modification par bombseb le lun. 12/sept./2005 16:43, modifié 1 fois.
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

startdrawing sans stopdrawing, utilisation de sprites pendant un drawing, un code comme ca espère même pas ke je le teste...

Dri
bombseb
Messages : 445
Inscription : jeu. 25/août/2005 22:59
Localisation : 974
Contact :

Message par bombseb »

8O

oh merde

j'ai fait ca vite fait au boulot car c'était bientôt l'heure de partir.... je vais corriger ca...
bombseb
Messages : 445
Inscription : jeu. 25/août/2005 22:59
Localisation : 974
Contact :

Message par bombseb »

c'est bon j'ai corrigé mon code et là ca marche !!!

cooool enfin
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

bah voila...
suffisait de potasser la doc

Dri
bombseb
Messages : 445
Inscription : jeu. 25/août/2005 22:59
Localisation : 974
Contact :

Message par bombseb »

non c'est juste que j'avais fais ca en speed au boulot...donc j'ai pas trop pris le temps de réfléchir :oops:

voilà maintenant je vais pouvoir faire mon starwars scroller demain au boulot :D
Répondre