Un bug avec plot et les fenêtres ?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
7dav77
Messages : 14
Inscription : jeu. 14/mai/2009 16:06

Un bug avec plot et les fenêtres ?

Message 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.
Atomo
Messages : 207
Inscription : lun. 17/sept./2007 12:27

Message 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.
7dav77
Messages : 14
Inscription : jeu. 14/mai/2009 16:06

Message 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.
Avatar de l’utilisateur
kernadec
Messages : 1606
Inscription : ven. 25/avr./2008 11:14

Message 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
Dernière modification par kernadec le lun. 15/juin/2009 21:49, modifié 3 fois.
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message 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                                   
Avatar de l’utilisateur
kernadec
Messages : 1606
Inscription : ven. 25/avr./2008 11:14

Message 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
Répondre