Page 3 sur 6

Re: [A tous] BUG GRAPHIQUE de "point(x,y)"

Publié : mer. 17/nov./2010 9:05
par drfloyd
C'est quand meme dingue un tel bug, en quoi la carte graphique peut influer sur le resultat du test d'un pixel, je trouve ce bug enorme.

Et pourquoi il n'a pas été détecté avant, depuis le temps que PB existe ?

Re: [A tous] BUG GRAPHIQUE de "point(x,y)"

Publié : mer. 17/nov./2010 9:14
par SPH
drfloyd a écrit :C'est quand meme dingue un tel bug, en quoi la carte graphique peut influer sur le resultat du test d'un pixel, je trouve ce bug enorme.

Et pourquoi il n'a pas été détecté avant, depuis le temps que PB existe ?
J'ai ce bug depuis quelques années deja.

Dis, quand est ce que tu vas faire le test du code en post 1 et nous dire le pourcentage de bugs ??

Re: [A tous] BUG GRAPHIQUE de "point(x,y)"

Publié : mer. 17/nov./2010 10:42
par MLD
Salut SPH
Le test donne 21.33% avec Nvidia GeForce8400GS avec XP.

Re: [A tous] BUG GRAPHIQUE de "point(x,y)"

Publié : mer. 17/nov./2010 11:00
par drfloyd
oui oui je vais faire le test ce soir, je suis pas sur le bon PC là, je suis sur Mac et sur Mac pas de bug.

Ce qui veut dire en tout cas qu'il faut eviter de realiser un jeu qui propose des tests de collision via la couleur des pixels ?!

les dév. devraient supprimer cette instruction, a defaut de la corriger.

Re: [A tous] BUG GRAPHIQUE de "point(x,y)"

Publié : mer. 17/nov./2010 13:29
par Warkering
Bof, 21.281328%. Tu me fais douter de mon millier de dollar fraîchement investi, là! :mrgreen:

Re: [A tous] BUG GRAPHIQUE de "point(x,y)"

Publié : mer. 17/nov./2010 14:03
par Patrick88
le 2ème code fonctionne -> 21.366 et des miettes

Re: [A tous] BUG GRAPHIQUE de "point(x,y)"

Publié : mer. 17/nov./2010 14:21
par Fig
J'suis buggué à + de 21% :cry:

Celeron T1400, portable avec carte graphique intégrée série 4, intel :roll: win7 64x et 4Go de Ram.

Re: [A tous] BUG GRAPHIQUE de "point(x,y)"

Publié : mer. 17/nov./2010 14:21
par djes
SPH> Plutôt que de mettre des nombres aléatoires, tu ne pourrais pas faire des dégradés? Je pense que ça vient d'un filtrage 3D, genre antiaaliasing ou fitrage anisotropique...

Re: [A tous] BUG GRAPHIQUE de "point(x,y)"

Publié : mer. 17/nov./2010 14:59
par Backup
c'est le Code de SPH qui bug , pas vos carte graphique !! :roll:

j'ai juste retiré ses "%8" qu'il a mis dans son code

testez ce Code , vous verrez a droite et a gauche le même dessin

c'est juste un peu plus long , mais chez moi comme ça , ça marche !!

alors qu'avec son code modifié bourré de "%8" forcement ça mettais des pixels Blanc
puisque c'est ce que demandait le code :roll:

Code : Tout sélectionner

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; BUG GRAPHIQUE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

InitSprite()
InitKeyboard()
InitMouse()

#dw=1024
#dh=768
#dc=32

If OpenScreen(#dw,#dh,#dc,"Another Earth")=0
  MessageRequester("Erreur", "Screen Open ("+Str(#dw)+","+Str(#dh)+",32) : impossible à ouvrir", 0) : End
EndIf

LoadFont(1, "Arial", 12)
StartDrawing(ScreenOutput())
  Box(0,0,#dw/2,#dh,RGB(0,255,0))
  Box(#dw/2,0,#dw/2,#dh,RGB(255,0,0))
  Box(4,4,#dw/2-8,#dh-8,0)
  Box(#dw/2+4,4,#dw/2-8,#dh-8,0)
  DrawingMode(#PB_2DDrawing_Default)
  DrawingFont(FontID(1))
  DrawText(#dw/2+30,#dh-30,"WAIT...", RGB(255,255,255))
StopDrawing()
GrabSprite(0,0,0,#dw,#dh)
FlipBuffers()
DisplaySprite(0,0,0)

Dim P(#dw/2,#dh)
StartDrawing(ScreenOutput())
  For u=4 To #dh-5
    For i=4 To #dw/2-5
      color=RGB(Random(i%700),Random(u%400),Random((i+u)%600))
      Plot(i,u,color)
      P(i,u)=color
    Next i
   ; If u%8=0
    StopDrawing()
    GrabSprite(0,0,0,#dw,#dh)
    FlipBuffers()
    DisplaySprite(0,0,0)
    StartDrawing(ScreenOutput())
  ;  EndIf
  Next u
StopDrawing()

percent=0
max=0

StartDrawing(ScreenOutput())
  For u=4 To #dh-5
    For i=4 To #dw/2-5
      color=Point(i,u)
      Plot(i+#dw/2,u,color)
      max+1
      ; If color<>P(i,u)
        ; Plot(i+#dw/2,u,RGB(255,255,255))
        ; ;Debug color
        ; percent+1 
      ; EndIf
    Next
   ; If u%8=0
      ExamineKeyboard()
      If KeyboardPushed(#PB_Key_Escape)
        End
      EndIf
    StopDrawing()
    GrabSprite(0,0,0,#dw,#dh)
    FlipBuffers()
    DisplaySprite(0,0,0)
    StartDrawing(ScreenOutput())
   ; EndIf
  Next
StopDrawing()

LoadFont(1, "Arial", 9)
StartDrawing(ScreenOutput())
  DrawingMode(#PB_2DDrawing_Default)
  DrawingFont(FontID(1))
  ;descrip$="   Si vous avez la meme chose dans le cadre vert et dans le cadre rouge, vous n'avez pas le bug graphique du ''Point(x,y)''   "
  ;DrawText(#dw/2-TextWidth(descrip$)/2,#dh-60,descrip$, RGB(255,255,255))
  f.f=(percent*100)/max
  If f=0
    descrip$=" Aucun bug graphique du ''Point(x,y)'' " 
  Else
    descrip$=" Le bug du ''Point(x,y)'' est présent à "+StrF(f.f)+"% "
  EndIf
  DrawText(#dw/2-TextWidth(descrip$)/2,#dh-36,descrip$, RGB(255,255,255))
StopDrawing()

;;;;;;;;;; si vous voulez sauvegarder votre image...
GrabSprite(0,0,0,#dw,#dh) : SaveSprite(0,"d:/test_gfx.bmp")
;;;;;;;;;;

FlipBuffers()

Repeat
  ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)
End
;;;;;;;;;;;;;;;


Re: [A tous] BUG GRAPHIQUE de "point(x,y)"

Publié : mer. 17/nov./2010 15:26
par Warkering
Et bien merci, Dobro! "Aucun bug graphique du Point(X,Y)" 8)

Re: [A tous] BUG GRAPHIQUE de "point(x,y)"

Publié : mer. 17/nov./2010 15:46
par djes
Personne ne regarde les codes ici? :roll: Je serais curieux de savoir comment celui de Dobro fait la comparaison plot/point!

Re: [A tous] BUG GRAPHIQUE de "point(x,y)"

Publié : mer. 17/nov./2010 16:04
par SPH
djes a écrit :Personne ne regarde les codes ici? :roll: Je serais curieux de savoir comment celui de Dobro fait la comparaison plot/point!
EXACTEMENT :!:
Mais avant d'intervenir, j'ai reverifié mes calculs une enieme fois et je suis sur de moi.
Que Dobro vire les lignes contenant les "%8" pour voir l'affichage ligne par ligne, cela ne me derange pas (AUCUNE incidence sur le but de la routine). Mais qu'il VIRE le moteur meme qui indique si il y a une erreur : NON !!
Vous pouvez parfaitement comprendre ce code qui verifie si la couleur du plot que l'on a mis a gauche est bien la meme que celle que l'on met a droite par une copie avec color=POINT puis PLOT(x,y,color) :

Code : Tout sélectionner

For u=4 To #dh-5
  For i=4 To #dw/2-5
  color=Point(i,u)
  Plot(i+#dw/2,u,color)
  max+1
  If color<>p(i,u)
    Plot(i+#dw/2,u,RGB(255,255,255))
    percent+1  
  EndIf
Next
...
Next
enfin, a celui qui m'a demandé un degradé sans random, je lui indique que je n'ai pas trouvé de dégradé stable qui fasse l'erreur (le hazard nous sert donc sur un plateau tanto des bons et des mauvais pixels). Le bug est peut etre dut aussi a random...

Changez la ligne

Code : Tout sélectionner

    color=RGB(Random(i%700),Random(u%400),Random((i+u)%600))
par d'autres randoms et vous verrez que le bug a une certaine logique de se fourrer uniquement dans certains tons... Si j'avais pondu un code faisant exprès de faire une simulation de bug, alors qu'on me montre ma partie de code honteusement planquée !!!!

Autre chose : testez le code. Puis quittez le et lancez un jeu. Repassez sur le bureau et relancez le code. Le jeu en memoire bouffera encore plus de place et generera un plus grand nombre de bugs...

PS : mon code affiche des points blancs la ou il constate une difference entre couleur de gauche et couleur de droite.
drfloyd a écrit :Ce qui veut dire en tout cas qu'il faut eviter de realiser un jeu qui propose des tests de collision via la couleur des pixels ?!
Un bon programmeur ne ferait JAMAIS de detection par point !!!!!!!!!!!!!!!!!

Re: [A tous] BUG GRAPHIQUE de "point(x,y)"

Publié : mer. 17/nov./2010 20:36
par G-Rom
y a pas de bug , ni carte graphique , ni bug de pb , juste un code foireux :mrgreen:
RGB(Random(i%700),Random(u%400),Random((i+u)%600))
par exemple , i%700 sature le rouge , chaque composante est codé sur 1 octet , une valeur plus grande va faire "débordé" sur la couleur suivante , il faut toujours vérifier les composante RGBa que l'on passe à RGB , sinon le résultat est aléatoire suivant les CG.

avec se code, personne n'a de bug :

Code : Tout sélectionner

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; BUG GRAPHIQUE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


Macro ceil(a,b)
If a>b : a=b : EndIf   
EndMacro


InitSprite()
InitKeyboard()
InitMouse()

#dw=1024
#dh=768
#dc=32

If OpenScreen(#dw,#dh,#dc,"Another Earth")=0
MessageRequester("Erreur", "Screen Open ("+Str(#dw)+","+Str(#dh)+",32) : impossible à ouvrir", 0) : End
EndIf

LoadFont(1, "Arial", 12)
StartDrawing(ScreenOutput())
Box(0,0,#dw/2,#dh,RGB(0,255,0))
Box(#dw/2,0,#dw/2,#dh,RGB(255,0,0))
Box(4,4,#dw/2-8,#dh-8,0)
Box(#dw/2+4,4,#dw/2-8,#dh-8,0)
DrawingMode(#PB_2DDrawing_Default)
DrawingFont(FontID(1))
DrawText(#dw/2+30,#dh-30,"WAIT...", RGB(255,255,255))
StopDrawing()
GrabSprite(0,0,0,#dw,#dh)
FlipBuffers()
DisplaySprite(0,0,0)

Dim p(#dw/2,#dh)
StartDrawing(ScreenOutput())
For u=4 To #dh-5
  For i=4 To #dw/2-5
    
    R.a = Random(i%700)
    G.a = Random(u%400)
    B.a = Random((i+u)%600)
    
    ceil(R,255)
    ceil(G,255)
    ceil(B,255)
    
    color=RGB(R,G,B)
    Plot(i,u,color)
    p(i,u)=color
Next
If u%8=0
StopDrawing()
GrabSprite(0,0,0,#dw,#dh)
FlipBuffers()
DisplaySprite(0,0,0)
StartDrawing(ScreenOutput())
EndIf
Next
StopDrawing()

percent=0
max=0

StartDrawing(ScreenOutput())
For u=4 To #dh-5
  For i=4 To #dw/2-5
  color=Point(i,u)
  Plot(i+#dw/2,u,color)
  max+1
  If color<>p(i,u)
    Plot(i+#dw/2,u,RGB(255,255,255))
    ;Debug color
      percent+1 
  EndIf
Next
If u%8=0
  ExamineKeyboard()
  If KeyboardPushed(#PB_Key_Escape)
    End
  EndIf
StopDrawing()
GrabSprite(0,0,0,#dw,#dh)
FlipBuffers()
DisplaySprite(0,0,0)
StartDrawing(ScreenOutput())
EndIf
Next
StopDrawing()

LoadFont(1, "Arial", 9)
StartDrawing(ScreenOutput())
DrawingMode(#PB_2DDrawing_Default)
DrawingFont(FontID(1))
;descrip$="   Si vous avez la meme chose dans le cadre vert et dans le cadre rouge, vous n'avez pas le bug graphique du ''Point(x,y)''   "
;DrawText(#dw/2-TextWidth(descrip$)/2,#dh-60,descrip$, RGB(255,255,255))
f.f=(percent*100)/max
If f=0
  descrip$=" Aucun bug graphique du ''Point(x,y)'' " 
Else
  descrip$=" Le bug du ''Point(x,y)'' est présent à "+StrF(f.f)+"% "
EndIf
DrawText(#dw/2-TextWidth(descrip$)/2,#dh-36,descrip$, RGB(255,255,255))
StopDrawing()

;;;;;;;;;; si vous voulez sauvegarder votre image...
GrabSprite(0,0,0,#dw,#dh) : SaveSprite(0,"d:/test_gfx.bmp")
;;;;;;;;;;

FlipBuffers()

Repeat
ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)
End
;;;;;;;;;;;;;;;

Re: [A tous] BUG GRAPHIQUE de "point(x,y)"

Publié : mer. 17/nov./2010 21:17
par djes
Yep, on avance, merci G-Rom! Je trouve bizarre que RGB() ne fasse pas le ceil() comme tu le fais. Du coup, j'ai adapté le code de SPH pour générer un fichier hexa quand ça déraille. Voici un extrait du résultat :
Point : $000A0377 ; Couleur : $010A0277
Point : $000C01FE ; Couleur : $010C01FE
Point : $001F05A5 ; Couleur : $011F04A5
Point : $000A0185 ; Couleur : $010A0085
Point : $000B013C ; Couleur : $010B003C
Point : $00190530 ; Couleur : $01190530
Point : $004B059A ; Couleur : $014B049A
Point : $0052050D ; Couleur : $0152040D
Point : $00250580 ; Couleur : $01250480
Point : $004201D9 ; Couleur : $014201D9
Point : $004B0320 ; Couleur : $014B0220
Point : $002D05B1 ; Couleur : $012D04B1
Point : $002A0369 ; Couleur : $012A0369
Point : $00180569 ; Couleur : $01180469
Point : $003901D0 ; Couleur : $013901D0
Point : $00720595 ; Couleur : $01720495
Point : $00160310 ; Couleur : $01160210
Point : $006F0355 ; Couleur : $016F0355
Point : $007703E3 ; Couleur : $017703E3
Point : $0008036A ; Couleur : $0108036A
Point : $00320319 ; Couleur : $01320319
Point : $003F03E3 ; Couleur : $013F03E3
Assez curieusement, on a effectivement un débordement dans l'octet de poids fort (normalement l'alpha), mais parfois les valeurs des couleurs aussi changent.

Edit : ah, euh, le code :

Code : Tout sélectionner

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; BUG GRAPHIQUE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

InitSprite() 
InitKeyboard() 
InitMouse()

#dw=1024
#dh=768
#dc=32

If OpenScreen(#dw,#dh,#dc,"Another Earth")=0
MessageRequester("Erreur", "Screen Open ("+Str(#dw)+","+Str(#dh)+",32) : impossible à ouvrir", 0) : End
EndIf

LoadFont(1, "Arial", 12) 
StartDrawing(ScreenOutput()) 
Box(0,0,#dw/2,#dh,RGB(0,255,0))
Box(#dw/2,0,#dw/2,#dh,RGB(255,0,0))
Box(4,4,#dw/2-8,#dh-8,0)
Box(#dw/2+4,4,#dw/2-8,#dh-8,0)
DrawingMode(#PB_2DDrawing_Default)
DrawingFont(FontID(1)) 
DrawText(#dw/2+30,#dh-30,"WAIT...", RGB(255,255,255))
StopDrawing() 
GrabSprite(0,0,0,#dw,#dh)
FlipBuffers() 
DisplaySprite(0,0,0)


Dim p(#dw/2,#dh)
StartDrawing(ScreenOutput()) 
For u=4 To #dh-5
  For i=4 To #dw/2-5
    color=RGB(Random(i%700),Random(u%400),Random((i+u)%600))
    Plot(i,u,color)
    p(i,u)=color
Next
If u%8=0
StopDrawing() 
GrabSprite(0,0,0,#dw,#dh)
FlipBuffers() 
DisplaySprite(0,0,0)
StartDrawing(ScreenOutput()) 
EndIf
Next
StopDrawing() 

OpenFile(0, "c:\RGBbug.txt")

percent=0
max=0

StartDrawing(ScreenOutput()) 
For u=4 To #dh-5
  For i=4 To #dw/2-5
  color=Point(i,u)
  Plot(i+#dw/2,u,color)
  max+1
  If color<>p(i,u)
    Plot(i+#dw/2,u,RGB(255,255,255))
    WriteStringN(0, "Point : $" + RSet(Hex(color, #PB_Long), 8, "0")+" ; Couleur : $" + RSet(Hex(p(i, u), #PB_Long), 8, "0"))
    ;Debug color
      percent+1  
  EndIf
Next
If u%8=0
  ExamineKeyboard()
  If KeyboardPushed(#PB_Key_Escape)
    End
  EndIf
StopDrawing() 
CloseFile(0)
GrabSprite(0,0,0,#dw,#dh)
FlipBuffers() 
DisplaySprite(0,0,0)
StartDrawing(ScreenOutput()) 
EndIf
Next
StopDrawing() 

LoadFont(1, "Arial", 9) 
StartDrawing(ScreenOutput()) 
DrawingMode(#PB_2DDrawing_Default)
DrawingFont(FontID(1)) 
;descrip$="   Si vous avez la meme chose dans le cadre vert et dans le cadre rouge, vous n'avez pas le bug graphique du ''Point(x,y)''   "
;DrawText(#dw/2-TextWidth(descrip$)/2,#dh-60,descrip$, RGB(255,255,255))
f.f=(percent*100)/max
If f=0
  descrip$=" Aucun bug graphique du ''Point(x,y)'' "  
Else
  descrip$=" Le bug du ''Point(x,y)'' est présent à "+StrF(f.f)+"% "
EndIf
DrawText(#dw/2-TextWidth(descrip$)/2,#dh-36,descrip$, RGB(255,255,255))
StopDrawing() 

;;;;;;;;;; si vous voulez sauvegarder votre image...
GrabSprite(0,0,0,#dw,#dh) : SaveSprite(0,"d:/test_gfx.bmp")
;;;;;;;;;;

FlipBuffers() 

Repeat
ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)
End
;;;;;;;;;;;;;;;

Re: [A tous] BUG GRAPHIQUE de "point(x,y)"

Publié : mer. 17/nov./2010 21:28
par Backup
djes a écrit :Personne ne regarde les codes ici? :roll: Je serais curieux de savoir comment celui de Dobro fait la comparaison plot/point!
il n'y avait plus la routine de verif, puisque je constatais de visu
que le prg marchait en virant certaines partie "douteuse" de son code ;)

G-rom donne une explication de ce qui se passais...

néanmoins le code que j'ai posté en dernier, fonctionne, et ne genere pas de bug chez moi
contrairement au code avant modif ...

il te suffisais donc de lancer mon code, pour Voir qu'il n'y avait plus de "bug"
d'où mon introduction :
c'est le Code de SPH qui bug , pas vos carte graphique !! :roll: