Page 1 sur 1

Un bug avec plot et les fenêtres ?

Publié : jeu. 14/mai/2009 16:29
par 7dav77
Bonjour à tous,

Sous Vista, directx10, plot me semble bugué:

OpenWindow(0,0,0,1000,200,"Un bug ?",#PB_Window_TitleBar)
StartDrawing(WindowOutput(0))
For i=0 To 999
Plot(i,100)
Next i
Delay(4000)


Le programme ci-dessus n'affiche que des morceaux de segment.
Si l'on remplace plot(i,100) par circle (i,100,2), par contre, ça fonctionne.
Vous allez peut-être me dire que c'est une histoire de type de variable, mais je doute que ce soit le cas...

...Ou que ça a déjà été rapporté ici:
http://www.purebasic.fr/french/viewtopi ... ht=directx.

...Ou que ça m'apprendra à bosser sous Vista. J'ai aussi Win2000 sur ma machine. Je vais aller voir si ça fait pareil sous 2000, tient, bonne idée. (En tout cas, avec l'ancienne version de PureBasic que j'avais, je crois qu'il n'y avait pas de souci. De même, sur l'écran graphique, no problemo.)

... Ou que des morceaux de segment, c'est encore des segments.

Bref, dites ce que vous voulez, mais dites-le.

Pourquoi vous le dites pas ?

Ah oui, faut envoyer.

Publié : jeu. 14/mai/2009 18:03
par Atomo
Je viens de tester sous Purebasic 4.30, Vista 32, carte graphique ATI 4870 driver à jour ou presque, aucun problème dans le code ci-dessus.

Publié : jeu. 14/mai/2009 19:15
par 7dav77
Merci d'avoir vérifié.

Je viens de tester sous W2k, no problemo.

Je viens aussi de mettre à jour le pilote de ma 8600m (site de Dell) et ça n'arrange rien, sous Vista. (Au contraire, l'image sur l'écran graphique est à présent curieusement déformée. Les disques faits avec circle sont elliptiques.)

Je résume la situation: lorsque je dessine sur fenêtre directement, ça bugue avec plot et box et linexy , comme si y'avait un problème de type (au bout de 256 pixels, ça ne s'affiche plus, puis au bout de 256 autres ça s'affiche à nouveau etc).
Et en plus, c'est plutôt lent.

Pfff.

Publié : lun. 15/juin/2009 19:09
par kernadec
bonjour 7Dav77
je suis un peu en retard.
et tu as peut être trouver la solution depuis,
en voila une!! mais je ne l'ai pas testée sous Vista,
elle fonctionne sous xp en attendant.
ah oui!! j'oubliais le truc de la box..
tu peux aussi utiliser box(i,100,1,1) c de la bidouille, mais ça dépanne

cordialement

Code : Tout sélectionner

Procedure Plotdelaine(x,y)  
	hdc=GetDC_(WindowID(0)):pen=CreatePen_(0,0,RGB(0,0,0)):hPenOld=SelectObject_(hdc,pen)
	SetPixel_(hdc,x,y,RGB(0,0,0))
	DeleteObject_(pen): DeleteObject_(hPenOld):ReleaseDC_(WindowID(0),hdc):DeleteDC_(hdc)
EndProcedure
OpenWindow(0,0,0,1000,200,"Un bug ?",#PB_Window_TitleBar)
StartDrawing(WindowOutput(0))
For i=0 To 999
Plotdelaine(i,100)
;Plot(i,100)
; Box(i,100,i,1)
Next i
StopDrawing()
Delay(4000) 
mince! corrigé, merci Ollivier

Publié : lun. 15/juin/2009 20:25
par Ollivier
Une petite remarque aussi dans l'élaboration d'une routine : chaque chose commence et finit (excepté certaines fonctions comme, par exemple ImageGadget() qui se détruit, comme tout gadget lors de la fermeture de la fenêtre dans laquelle ils sont créés).

Code : Tout sélectionner

If OpenWindow(0, 0, 0, 400, 300, "Test", $CF0001)
   If CreateImage(0, 400, 300)
      If StartDrawing(imageoutput(0) )
         For X = 0 To 399
            Plot(X, 150, #Red)
         Next X
         StopDrawing()
      EndIf
      If imagegadget(0, 0, 0, 400, 300, imageid(0) )
         Repeat                                          
            Delay(1)                                    
         Until WindowEvent() = #PB_Event_CloseWindow   
      EndIf                                            
      FreeImage(0)                                 
   EndIf                                       
   CloseWindow(0)                            
EndIf                                   

Publié : mar. 23/juin/2009 14:42
par kernadec
bonjour
je viens de visiter ce post :
http://www.purebasic.fr/french/viewtopi ... stretchblt
où il est question de réinventer la roue,
mais voila quelle tourne mieux avec un carré.
dans le post précèdent, je faisais remarquer à Mr 7dav77
qu'il pouvait utiliser la fonction box(x,y,1,1) à la place de plot.
avec le programme test de Mr Dobro, on peut s'apercevoir
que cette box est beaucoup plus rapide que le reste
ça va faire plaisir à beaucoup de monde.

cordialement