Page 5 sur 6

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

Publié : lun. 22/nov./2010 13:21
par kelebrindae
@SPH:
En ajoutant

Code : Tout sélectionner

Debug Str(i) + "," + Str(u) + "," + Str(i+u)
juste après le

Code : Tout sélectionner

color.l=RGB(i,u,i+u)
on obtient beaucoup de résultats du genre "295,214,508" ( RGB(295,214,508) donne 33347367, ce qui est supérieur à 383040)
=> il y a donc bien dépassement.

En remplaçant le

Code : Tout sélectionner

color.l=RGB(i,u,i+u)
par

Code : Tout sélectionner

color.l=RGB(i & $FF, u & $FF, (i + u) & $FF)
, je passe de 91% d'erreur à 0% .
=> ce dépassement pose donc bien un problème dans le calcul du pourcentage d'erreur.

Cependant, si avec la modif de Djes (ajout des "& $FF"), tu as bien des résultats différents selon qu'un jeu s'exécute en parallèle ou non, alors il y a bien un truc bizarre que l'on peut étudier.

Est-ce que cela clarifie le problème ?

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

Publié : lun. 22/nov./2010 14:01
par djes
kelebrindae> merci!

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

Publié : lun. 22/nov./2010 14:49
par Frenchy Pilou
Je suis hyper rouillé mais "les modulos" ne sont pas fait pour éviter ce genre de débordements?
Et même suivant les les langages se font automatiquement?

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

Publié : lun. 22/nov./2010 16:38
par SPH
Bon, outre le RGB qui se comporte comme un RGBA, si on le vire et qu'on fait simplement "color.l=i+u", quand un jeu est lancé, j'obtient du noir :

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.l=i+u
    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))
    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
;;;;;;;;;;;;;;;
Image

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

Publié : lun. 22/nov./2010 16:41
par drfloyd
djes a écrit :Y'a pas de bug, juste la fonction RGB() qui est un peu trop permissive.
Je ne comprends pas... l'informatique ne peut pas commetre d'erreur, donc que signifie "une fonction permissive" ?!

Je teste un point, le resultat doit toujours etre bon ! Non ?

Moi je constate :

Mon jeu qui teste la couleur du decor pour les colisions fonctionne sur un pc et son mon mac, et quand je le fait tourner sur un autre pc equipe d'une 9600M GT il ne fonctionne plus... Et ça c'est pas un bug ???????? Le même programme à l'octet près.

La carte graphique ne doit pas intervenir la dedans, ca doit etre masqué par le driver.

Enfin bon je suis un debutant sans grandes connaissances mais quand meme c'est le premiere fois de ma vie que je vois un basic qui donne des resultats differents sur 2 PCs.

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

Publié : lun. 22/nov./2010 16:43
par SPH
drfloyd a écrit :
djes a écrit :Y'a pas de bug, juste la fonction RGB() qui est un peu trop permissive.
Je ne comprends pas... l'informatique ne peut pas commetre d'erreur, donc que signifie "une fonction permissive" ?!

Je teste un point, le resultat doit toujours etre bon ! Non ?

Moi je constate :

Mon jeu qui teste la couleur du decor pour les colisions fonctionne sur un pc et son mon mac, et quand je le fait tourner sur un autre pc equipe d'une 9600M GT il ne fonctionne plus... Et ça c'est pas un bug ???????? Le même programme à l'octet près.

La carte graphique ne doit pas intervenir la dedans, ca doit etre masqué par le driver.

Enfin bon je suis un debutant sans grandes connaissances mais quand meme c'est le premiere fois de ma vie que je vois un basic qui donne des resultats differents sur 2 PCs.
Il y a 2 bugs (sur mon ordi du moins). Un bug qui met dans RGB() plus que la valeur max, et un bug quand la memoire est un peu trop encombré et qui rend noir un point()

PS : je JAMAIS faire de tests de collisions avec un point() !!!!!! Refere toi plutot a une table de variables !

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

Publié : lun. 22/nov./2010 17:07
par djes
C'est difficile à expliquer. Le plot dessine un point à l'écran. Si on lui donne une valeur de couleur hors limite, il va réagir différemment suivant les cartes. D'autant que cette valeur hors limite joue sur l'alpha (la transparence), qui est gérée différemment suivant les pilotes, les modes, les cartes, les versions de DX!
Du coup, le point ne lit pas la valeur que l'on a donnée au plot.
Maintenant, il serait intéressant de voir si certains pilotes ne forcent pas certains effets, comme par exemple un antialiasing plein écran. Du coup, la carte graphique peut modifier les valeurs, et le point donner un résultat complètement différent.

Voici un petit code très simple pour faire des essais (activer le débogueur).

Code : Tout sélectionner

Define Couleur.l

Macro Guillemet
    "
EndMacro

Macro Bug_Test(Couleur)
  
  Plot(0, 0, Couleur)
  
  If Point(0, 0) <> Couleur
    Debug Guillemet#Couleur:Bug"
  EndIf
  
EndMacro

;-*** DEBUT

InitSprite()
InitKeyboard() 
InitMouse()

OpenScreen(640, 480, 32, "")

StartDrawing(ScreenOutput()) 

;- Test 1
Bug_Test($FFFFFF)

;- Test 2
Bug_Test($FFFFFF + 1)

;- Test 3
Bug_Test(RGB(255, 255, 255))

;- Test 4
Bug_Test(RGB(255 + 1, 255, 255))

StopDrawing()

End

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

Publié : lun. 22/nov./2010 17:17
par SPH
$FFFFFF + 1:Bug
RGB(255 + 1, 255, 255):Bug
A noter que j'ai changé de carte graphique et que nvidia et ati me donnent le meme resultat...
Je testerais demain quand mon jeu sera fini (actu il tourne en memoire)

EDIT : @tonton : ma CG est toute neuve :!:

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

Publié : lun. 22/nov./2010 17:19
par tonton
J' avais a peu près le même type de bug y a un moment!
Des défauts de pixel manquant fuite mémoire avec opengl, plantage.
C' était en fait, des cases de mémoires vive défectueuses sur la carte graphique.
Pourtant Windows fonctionnait bien.....

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

Publié : lun. 22/nov./2010 17:20
par tonton
SPH a écrit :
$FFFFFF + 1:Bug
RGB(255 + 1, 255, 255):Bug
A noter que j'ai changé de carte graphique et que nvidia et ati me donnent le meme resultat...
Je testerais demain quand mon jeu sera fini (actu il tourne en memoire)
Essaye en enlevant une barrette de ram ou l' autre!

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

Publié : lun. 22/nov./2010 17:24
par SPH
tonton a écrit :
SPH a écrit :
$FFFFFF + 1:Bug
RGB(255 + 1, 255, 255):Bug
A noter que j'ai changé de carte graphique et que nvidia et ati me donnent le meme resultat...
Je testerais demain quand mon jeu sera fini (actu il tourne en memoire)
Essaye en enlevant une barrette de ram ou l' autre!
Je sais ce que ca fait d'avoir une barette memoire defaillante. Et la je peux affirmer que ce n'est pas ca. En plus, j'ai de la marque. C'est meme sur, j'ai plusieurs fois bourrer a mort la memoire et elle n'a JAMAIS planté (style 5 applications lancées).
Nan, je ne vois que PB qui ne lit pas au bon endroit les point() qu'on lui fait suivant si la memoire est vide ou pas...

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

Publié : lun. 22/nov./2010 17:34
par djes
Mais non, le fait que ça bug sur ces valeurs est normal, puisqu'il y a dépassement dans l'alpha.

$FFFFFF = $00FFFFFF = RGB(255, 255, 255) = %11111111 11111111 11111111

$FFFFFF + 1 = RGB(255 + 1, 255, 255) = %00000001 00000000 00000000 00000000

Plot ou point ne tient pas compte de l'alpha, du coup, ça bug. Il faut s'assurer de limiter à [0 ; 255] les composantes données à plot().

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

Publié : lun. 22/nov./2010 17:37
par SPH
djes a écrit :Plot ou point ne tient pas compte de l'alpha, du coup, ça bug. Il faut s'assurer de limiter à [0 ; 255] les composantes données à plot().
C'est quand meme pour moi nouveau et tres surprenant.

Donc, pour l'autre "bug", tu ne t'expliques pas pourquoi un code pb donne des resultats d'affichage differents suivant qu'un jeu est lancé en memoire ou pas ?!
Je reste avec mon bug alors ??? (pour cette partie, personne n'a essayé mon code avec un jeu ?)

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

Publié : lun. 22/nov./2010 17:40
par djes
Dans ton code, la variable u dépasse très largement les 255. Je vais essayer ce soir avec un modulo ou un "and" ou un test, et un jeu.

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

Publié : lun. 22/nov./2010 17:45
par Frenchy Pilou
ah on y vient au modulo :D