Voilà le code :
Code : Tout sélectionner
; ----------------------------------------
;| |
;| By >Mytic< |
;| |
;| Outils de Dessin sur Buffer |
; ----------------------------------------
;------ c'est plus rapide que le plot et le point
InitSprite()
OpenScreen(640,480,32,"")
;-----------------------------------------------------(mes commandes de dessin 2D)
Global PF.l
Global modec.l
Global DB.l
Global DBP.l
Procedure.l start_drawing_to_buffer() ;---------(pour commancer le dessin sur Buffer)
If StartDrawing(ScreenOutput())
DB = DrawingBuffer()
DBP = DrawingBufferPixelFormat()
Select DBP
Case #PB_PixelFormat_8Bits : PF=1:modec = -1; 1 octet par pixel, palettisé
Case #PB_PixelFormat_15Bits : PF=2:modec = 0; 2 octets par pixel
Case #PB_PixelFormat_16Bits : PF=2:modec = 0; 2 octets par pixel
Case #PB_PixelFormat_24Bits_RGB : PF=3:modec = 1; 3 octets par pixel (RRGGBB)
Case #PB_PixelFormat_24Bits_BGR : PF=3:modec = 2; 3 octets par pixel (BBGGRR)
Case #PB_PixelFormat_32Bits_RGB : PF=4:modec = 1; 4 octets par pixel (RRGGBB)
Case #PB_PixelFormat_32Bits_BGR : PF=4:modec = 2; 4 octets par pixel (BBGGRR)
EndSelect
ProcedureReturn 1
Else
ProcedureReturn 0
EndIf
EndProcedure
Procedure.l convert_type_color_buffer(couleur.l) ;-----(pour les Conversions RRGGBB to BBGGRR) incomplet !!!
If modec = -1
;........
c.l = couleur
EndIf
If modec = 0
;........
c.l = couleur
EndIf
If modec = 1
;........
c.l = couleur
EndIf
If modec = 2
R.l = Red(couleur)
G.l = Green(couleur)
B.l = Blue(couleur)
c.l = RGB(B,G,R)
;c.l = couleur
EndIf
ProcedureReturn c.L
EndProcedure
Procedure draw_pixel_buffer(X.l , Y.l , Color.l) ;-----(dessine un pixel sur le Buffer)
Color = convert_type_color_buffer(Color)
PokeL(DB + (X * PF) + DrawingBufferPitch()* ( Y ) , Color )
EndProcedure
Procedure.l get_pixel_buffer(X.l,Y.l) ;-----(prend la couleur d'un pixel dans le buffer)
couleur.l = PeekL(DB + (X * PF) + DrawingBufferPitch()* ( Y ))
Color.L = convert_type_color_buffer(couleur)
ProcedureReturn Color.L
EndProcedure
Procedure stop_drawing_to_buffer() ;--------(fin du drawing sur Buffer)
StopDrawing()
EndProcedure
;-----------------------------------------------------------------------------------
;-------------------------(exemple d'utilisation)
For i = 0 To 255 Step 10
If start_drawing_to_buffer()
For y = 0 To 250
For x = 0 To 250
draw_pixel_buffer(x,y,RGB(i,x,y))
Next x
Next y
stop_drawing_to_buffer()
EndIf
FlipBuffers()
Next i
Delay(1000)
End
Amusez vous bien !
