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

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
drfloyd
Messages : 220
Inscription : mar. 21/août/2007 13:30
Contact :

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

Message 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 ?
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

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

Message 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 ??

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

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

Message par MLD »

Salut SPH
Le test donne 21.33% avec Nvidia GeForce8400GS avec XP.
drfloyd
Messages : 220
Inscription : mar. 21/août/2007 13:30
Contact :

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

Message 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.
Warkering
Messages : 808
Inscription : ven. 08/janv./2010 1:14
Localisation : Québec, Canada

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

Message par Warkering »

Bof, 21.281328%. Tu me fais douter de mon millier de dollar fraîchement investi, là! :mrgreen:
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

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

Message par Patrick88 »

le 2ème code fonctionne -> 21.366 et des miettes
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

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

Message 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.
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

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

Message 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...
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

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

Message 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
;;;;;;;;;;;;;;;

Warkering
Messages : 808
Inscription : ven. 08/janv./2010 1:14
Localisation : Québec, Canada

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

Message par Warkering »

Et bien merci, Dobro! "Aucun bug graphique du Point(X,Y)" 8)
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

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

Message par djes »

Personne ne regarde les codes ici? :roll: Je serais curieux de savoir comment celui de Dobro fait la comparaison plot/point!
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

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

Message 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 !!!!!!!!!!!!!!!!!

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

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

Message 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
;;;;;;;;;;;;;;;
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

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

Message 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
;;;;;;;;;;;;;;;
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

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

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