bon ce que tu voulais faire c'est des taches de Martin !
je vais te mettre un autre exemple qui utilise l'assembleur en ligne mais malheuresement tu pourra sans doute pas essayer avec la Demo
voici le code que tu voulais faire
l'emploi de sprites active la rapidité car en faite on precalcul dans ce cas !!
click bouton droit pour quitter !!!!
ce code marche sur ta version de demo ! (en principe)
attention mode Turbo on !! accroche toi ça va decoiffer
Code : Tout sélectionner
#dobro=1
#Police=1
#Sprite=1
spr=1
Dim ecran(640,400)
For x = 0 To 640 ; un écran de couleurs aléatoires
For y = 0 To 400
r=Random(255)
g=Random(255)
b=Random(255)
c=RGB(r,g,b)
ecran(x,y)= c
Next y
Next x
; ***********************************
Resultat = InitSprite()
FontID = LoadFont(#Police, "arial", 18, #PB_Font_Bold )
EcranX = GetSystemMetrics_(#SM_CXSCREEN):;=largeur de l'ecran
EcranY = GetSystemMetrics_(#SM_CYSCREEN):;=hauteur de l'ecran
WindowID = OpenWindow(1, 0, 0, 640, 400, #PB_Window_SystemMenu|#PB_Window_BorderLess |#PB_Window_ScreenCentered , "hello")
WindowID = WindowID(1)
Result = OpenWindowedScreen(WindowID,0,0, 640, 400, 1, 0,0)
CreateSprite(1, 640, 400) ; cree 1 sprites qui sert d'ecran 1
CreateSprite(2, 640, 400) ; cree 1 sprites qui sert d'ecran 2
Resultat = InitMouse()
Repeat
ExamineMouse()
Event=WindowEvent()
While MouseButton(1)
mouse_event_(#MOUSEEVENTF_LEFTUP,xm,ym,0,1) ; appuis
mouse_event_(#MOUSEEVENTF_LEFTDOWN,xm,ym,0,1) ; relache
Wend
If MouseButton(2)
End
EndIf
StartDrawing(SpriteOutput(spr) ) ; on dessine dedans
For x = 1 To 640
For y = 1 To 400 ;genre de moyenne de couleur autour du pixel considéré
c=ecran(x-1,y) + ecran(x+1,y) + ecran(x,y-1) + ecran(x,y+1)
c=c/5
If c<1
c = RGB(255,255,255)
EndIf
ecran(x,y)=c
Plot(x,y,c) ; on affiche les pixels avec la nouvelle couleur
Next y
Next x
StopDrawing()
spr=spr+1
If spr>2
spr=1
EndIf
DisplaySprite(spr, 0, 0)
FlipBuffers():; affiche l'ecran
ClearScreen(0, 0, 0) :;efface l'ecran
Until Event=#PB_Event_CloseWindow
voici ce qui avais ete fait avec l'assembleur integré !!
(ça te prouve que le pure marche avec les 2 languages !

marchera pas sur ta demo !! dommage t'aurai pu voir la difference de vitesse
Code : Tout sélectionner
Global _virtuscr.l
#largeur=640 : #hauteur=480 ;dimensions de l'écran
!largeur=640 ;les mêmes pour Fasm
!hauteur=480
Enumeration
#rougebleujaune
#nivgris
#defaut
EndEnumeration
;#modepalette=#rougebleujaune
#modepalette=#rougebleujaune
;#modepalette=#defaut
CompilerIf #modepalette=#defaut
Procedure palettiser()
EndProcedure
CompilerElse
Procedure palettiser()
InitPalette()
CreatePalette(0)
CompilerSelect #modepalette
CompilerCase #rougebleujaune
For t=0 To 63
SetPaletteColor(t,RGB(t*4,0,0))
SetPaletteColor(t+64,RGB((63-t)*4,0,t*4))
SetPaletteColor(t+128,RGB(t*4,t*4,(63-t)*4))
SetPaletteColor(t+192,RGB(255,255,t*4))
Next
CompilerCase #nivgris
For t=0 To 255
SetPaletteColor(t,RGB(t,t,t))
Next
CompilerEndSelect
DisplayPalette(0)
EndProcedure
CompilerEndIf
Procedure onattend()
Repeat
Delay(80)
FlipBuffers()
Until IsScreenActive()
EndProcedure
Procedure rendu()
scraoutpout=ScreenOutput()
If scraoutpout : If StartDrawing(scraoutpout)
dbuff=DrawingBuffer()
pitch=DrawingBufferPitch()
If pitch=#largeur
CopyMemory(_virtuscr,dbuff,#largeur*#hauteur)
Else
For ligne=0 To #hauteur-1
CopyMemory(_virtuscr+ligne*#largeur,dbuff+ligne*pitch,#largeur)
Next
EndIf
StopDrawing() : EndIf : EndIf
EndProcedure
Enumeration
#bordsnoirs
#bordsjoints
EndEnumeration
#modedesbords=#bordsnoirs
;#modedesbords=#bordsjoints
Procedure martinet()
DisableDebugger ;le débogueur fout le bordel dans les "LOOP"
CompilerSelect #modedesbords
CompilerCase #bordsjoints
MOV Edi,_virtuscr
XOR Ebx,Ebx
CLD
MOVZX ax,byte[Edi+largeur*(hauteur-1)]
MOV bl,[Edi+largeur*hauteur-1]
ADD ax,bx
MOV bl,[Edi+1]
ADD ax,bx
MOV bl,[Edi+largeur]
ADD ax,bx
SHR ax,2
INC al
!stosb
MOV Ecx,largeur-1
lign0:
MOVZX ax,byte[Edi+largeur*(hauteur-1)]
MOV bl,[Edi-1]
ADD ax,bx
MOV bl,[Edi+1]
ADD ax,bx
MOV bl,[Edi+largeur]
ADD ax,bx
SHR ax,2
INC al
!stosb
LOOP l_lign0
MOV Ecx,largeur*(hauteur-2)
centrecr:
MOVZX ax,byte[Edi-largeur]
MOV bl,[Edi-1]
ADD ax,bx
MOV bl,[Edi+1]
ADD ax,bx
MOV bl,[Edi+largeur]
ADD ax,bx
SHR ax,2
INC al
!stosb
LOOP l_centrecr
MOV Ecx,largeur-1
derlign:
MOVZX ax,byte[Edi-largeur]
MOV bl,[Edi-1]
ADD ax,bx
MOV bl,[Edi+1]
ADD ax,bx
MOV bl,[Edi-largeur*(hauteur-1)]
ADD ax,bx
SHR ax,2
INC al
!stosb
LOOP l_derlign
MOVZX ax,byte[Edi-largeur]
MOV bl,[Edi-1]
ADD ax,bx
MOV bl,[Edi+1-largeur*hauteur]
ADD ax,bx
MOV bl,[Edi-largeur*(hauteur-1)]
ADD ax,bx
SHR ax,2
INC al
!stosb
CompilerCase #bordsnoirs
MOV Edi,_virtuscr
ADD Edi,largeur+1
MOV Edx,hauteur-2
XOR Ebx,Ebx
CLD
bclecr:
MOV ecx,largeur-2
bcllign:
MOVZX ax,byte[edi-largeur]
MOV bl,[edi-1]
ADD ax,bx
MOV bl,[edi+1]
ADD ax,bx
MOV bl,[edi+largeur]
ADD ax,bx
SHR ax,2
INC al
!stosb
LOOP l_bcllign
ADD edi,2
DEC edx
JNZ l_bclecr
CompilerEndSelect
EnableDebugger
EndProcedure
;-ZHE PROG
If InitKeyboard() And InitSprite() And OpenScreen(#largeur,#hauteur,8,"Taches de Martin")
palettiser()
_virtuscr=AllocateMemory(#largeur*#hauteur)
SetFrameRate(25)
Repeat
martinet()
rendu()
ExamineKeyboard()
FlipBuffers()
If IsScreenActive()=0
onattend()
EndIf
Until KeyboardReleased(#PB_Key_Escape)
Else
MessageRequester("Ah ben ça marche pas.","Impossible d'initialiser DirectX7")
EndIf
alors tu l'achete la license ??
