Buffer supplémentaire
Buffer supplémentaire
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 ?
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 ?
Quelques manoucheries : I can't give you anything but love / Stompin' at decca
c'est bon j'ai trouvé comment faire... je passe par un tableau de variables
Quelques manoucheries : I can't give you anything but love / Stompin' at decca
mais je ne sais pas si c'est mieux de passer par une zone mémoire / pointeur
quelqu'un peut me dire ?
quelqu'un peut me dire ?
Quelques manoucheries : I can't give you anything but love / Stompin' at decca
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.
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.
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 :
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
hum interressant tout ca...
les sprites j'ai pas encore trop testé...mais c'est pas bête faut que je teste ca...
les sprites j'ai pas encore trop testé...mais c'est pas bête faut que je teste ca...
Quelques manoucheries : I can't give you anything but love / Stompin' at decca
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 ??
comment tu ferais toi pour avoir un 2eme buffer graphique invisible sur lequel toutes les fonctions (2D, fonctions de sprites) seraient disponibles ??
Quelques manoucheries : I can't give you anything but love / Stompin' at decca
ah bon ??
alors je vais tester ca tout de suite car je suis vraiment bloqué là....
alors je vais tester ca tout de suite car je suis vraiment bloqué là....
Quelques manoucheries : I can't give you anything but love / Stompin' at decca
je viens de tester ceci avec ta technique du usebuffer(#sprite) et la réaction est vraiment bizarre...
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
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.
Quelques manoucheries : I can't give you anything but love / Stompin' at decca

oh merde
j'ai fait ca vite fait au boulot car c'était bientôt l'heure de partir.... je vais corriger ca...
Quelques manoucheries : I can't give you anything but love / Stompin' at decca
c'est bon j'ai corrigé mon code et là ca marche !!!
cooool enfin
cooool enfin
Quelques manoucheries : I can't give you anything but love / Stompin' at decca
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
voilà maintenant je vais pouvoir faire mon starwars scroller demain au boulot

voilà maintenant je vais pouvoir faire mon starwars scroller demain au boulot

Quelques manoucheries : I can't give you anything but love / Stompin' at decca