Page 1 sur 5

Le debut de la fin du bug du Point()

Publié : mar. 04/janv./2011 18:47
par SPH
Je viens de voir que ce chez Fred a viré la possibilité de faire un post relatif a un bug !
Alors, je le fais ici (mais je l'ai aussi fais sur le fofo eng).

Pouvez vous executez ce code et me dire si la reponse est negative ??
UN TRUC : tjr utiliser un ecran 32 bits, ne changez pas ca.
Par contre, essayez differentes resolutions plz

Dobro, fais pas ta tete de cochon et essaye aussi :wink: (tu noteras le smiley !!)

Code : Tout sélectionner

InitSprite() 
InitMouse() 
InitKeyboard() 

If ExamineDesktops()
   dw.w=DesktopWidth(0) 
   dh.w=DesktopHeight(0) 
Else 
   dw.w=1024 
   dh.w=768 
EndIf 

nb=8290
cmb=0

;;;;;;;;;;;;;;

OpenScreen(dw,dh,32,"") 

LoadSprite(0,"d:\SPH.bmp")
ClearScreen(0)
DisplaySprite(0,0,0)

;;;;;;;;;;;

StartDrawing(ScreenOutput()) 
For u=0 To 72
  For i=0 To 178
    x=Point(i,u)
    If x<>0
      cmb+1
    EndIf
  Next
Next
StopDrawing() 

CloseScreen()

Debug ("Nombre de pixels non noir : "+Str(nb))
Debug ("Nombre de pixels non noir observé par l'instruction Point() : "+Str(cmb))
Debug (" ")

If nb=cmb
  Debug ("No error")
Else
  Debug ("ERREUR DE COMPTAGE DE POINT()")
EndIf
With this logo :
Image

Re: Le debut de la fin du bug du Point()

Publié : mar. 04/janv./2011 19:11
par Backup
yes ! bug :

Image

Re: Le debut de la fin du bug du Point()

Publié : mar. 04/janv./2011 21:56
par Le Soldat Inconnu
pas d'erreur, mais à voir ta méthode, je dirais que l'erreur est générée par la carte graphique elle même car tu regardes un sprite déjà affiché et pas l'image

Dobro, essaie ceci :

Code : Tout sélectionner

InitSprite() 
InitMouse() 
InitKeyboard() 

If ExamineDesktops()
		dw.w=DesktopWidth(0) 
		dh.w=DesktopHeight(0) 
Else 
		dw.w=1024 
		dh.w=768 
EndIf 

nb=8290
cmb=0

;;;;;;;;;;;;;;

OpenScreen(dw,dh,32,"") 

LoadImage(0,"SPH.bmp")
ClearScreen(0)

;;;;;;;;;;;

StartDrawing(ScreenOutput()) 
DrawImage(ImageID(0), 0, 0)
For u=0 To 72
	For i=0 To 178
		x=Point(i,u)
		If x<>0
			cmb+1
		EndIf
	Next
Next
StopDrawing() 

CloseScreen()

Debug ("Nombre de pixels non noir : "+Str(nb))
Debug ("Nombre de pixels non noir observé par l'instruction Point() : "+Str(cmb))
Debug (" ")

If nb=cmb
	Debug ("No error")
Else
	Debug ("ERREUR DE COMPTAGE DE POINT()")
EndIf

Re: Le debut de la fin du bug du Point()

Publié : mar. 04/janv./2011 22:00
par venom
Nombre de pixels non noir : 8290
Nombre de pixels non noir observé par l'instruction Point() : 8290

No error
pas d'erreur pour ma part :) :wink:






@++

Re: Le debut de la fin du bug du Point()

Publié : mar. 04/janv./2011 22:28
par Noos88
Mois aussi je n'ai pas de défaut

Nombre de pixels non noir : 8290
Nombre de pixels non noir observé par l'instruction Point() : 8290

No error

Re: Le debut de la fin du bug du Point()

Publié : mar. 04/janv./2011 23:36
par Ollivier
Bonsoir SPH,

Je pense que, dans le cas de l'observation d'un pixel, si l'on veut rester dans le compatible, il est de bon aloi de s'offrir une marge de tolérance. Pour moi (mais ça ne reste que mon avis personnel...), le noir que je peux voir à l'écran, ça n'est pas seulement RGB(0, 0, 0). C'est aussi RGB(1, 0, 0), RGB(0, 1, 0), ou bien RGB(1, 1, 0) aussi, voire RGB(1, 1, 1), etc... Bref, c'est tout ce qui avoisine le noir absolu dans l'espace des couleurs.

Donc la condition

Code : Tout sélectionner

If x<>0
aboutit à quelque chose de peu rustique...

Voici une manière qui me semble plus adéquate (c'est le théorème de Pythagore appliqué dans l'espace des couleurs):

Code : Tout sélectionner

cx.I = RgbR(x)
cy.I = RgbG(x)
cz.I = RgbB(x)
If Sqr(cx * cx + cy * cy + cz * cz) < 2.

Re: Le debut de la fin du bug du Point()

Publié : mer. 05/janv./2011 1:50
par Backup
Le Soldat Inconnu a écrit :pas d'erreur, mais à voir ta méthode, je dirais que l'erreur est générée par la carte graphique elle même car tu regardes un sprite déjà affiché et pas l'image

Dobro, essaie ceci :
pareil meme erreur !

Image

Re: Le debut de la fin du bug du Point()

Publié : mer. 05/janv./2011 7:53
par kernadec
bonjour
Toujours le même problème avec ma résolution de ouf 1920 1080..
mais en 1024 768 NO ERROR en utilisant POINT(x,y) ainsi qu'avec l'Api getpixel_ avec le code de Dobro


Cordialement

Code : Tout sélectionner

InitSprite() 
InitMouse() 
InitKeyboard() 

If ExamineDesktops()
		dw.w=DesktopWidth(0) 
		dh.w=DesktopHeight(0) 
Else 
		dw.w=1024 
		dh.w=768 
EndIf 
;dw.w=1024 
;dh.w=768 

nb=8290
cmb=0

;;;;;;;;;;;;;;

hwnd=OpenScreen(dw,dh,32,"") 

LoadSprite(0,"d:\SPH.bmp")
ClearScreen(0)
DisplaySprite(0,0,0)

;;;;;;;;;;;

dc=StartDrawing(ScreenOutput()) 
For u=0 To 72
	For i=0 To 178
        ;x=Point(i,u) 
		x=GetPixel_(dc,i,u)
		If x<>0
			cmb+1
		EndIf
	Next
Next
StopDrawing() 

CloseScreen()

Debug ("Nombre de pixels non noir : "+Str(nb))
Debug ("Nombre de pixels non noir observé par l'instruction Point() : "+Str(cmb))
Debug (" ")

If nb=cmb
	Debug ("No error")
Else
	Debug ("ERREUR DE COMPTAGE DE POINT()")
EndIf


Re: Le debut de la fin du bug du Point()

Publié : mer. 05/janv./2011 9:39
par djes
Tu parles d'une compatibilité! Avec Windows on est toujours dans la bidouille! M'étonne pas que les airbus se cassent la gueule!

Donc, si c'est un problème de drivers, que l'API devrait renvoyer une valeur de point() correcte, Fred n'a rien à corriger. A voir quand même si vos pilotes n'ont pas du Fullscreen Antialiasing activé ou un truc dans le genre, qui altérerait la valeur des pixels lors de leur écriture, et donc la valeur du point().

Re: Le debut de la fin du bug du Point()

Publié : mer. 05/janv./2011 9:47
par Cool Dji
Yep djes,
La prop d'Ollivier est sympa puisqu'elle intègre un éventuel lissage et prend bien en compte tous les points noirs ou presque noirs => bien entendu elle rend impossible le test de SPH sur le nombre précis de point noir...ou de tout autre couleur d'ailleurs !

Re: Le debut de la fin du bug du Point()

Publié : mer. 05/janv./2011 9:50
par kelebrindae
Aucune erreur chez moi en 640x480,800x600,1024x768,1280x768,1280x1024, avec une ATI Radeon HD 3400.

Il m'est venu une idée (probablement stupide mais bon, j'essaie quand même) : on sait que ta carte graphique est relativement récente et que les drivers sont à jour. On sait aussi que d'autres, avec un matériel comparable, n'ont pas le souci. Donc je me dis: ça vient peut-être de la façon dont ce matos est configuré.
=> moi, dans mon systray (à droite de la barre des tâches), j'ai un petit logo ATI qui donne accès à un menu de paramétrage (nVidia fait la même chose). Dans ce menu, j'ai par exemple une entrée "Standard Settings" avec 5 options allant de "optimal quality" à "optimal performance"; si je choisis cette dernière, je sais que le driver va pratiquer des optimisations sauvages pour obtenir le meilleur framerate. Est-ce qu'une de ces optimisations mènerait à une imprécision du "point" ou au bug que tu constates avec les "clearscreen(0)" ?
De même, j'ai une entrée "anti-aliasing" qui est désactivée par défaut mais peut être forcée à "x2" ou "x4". Si la carte fait de l'anti-aliasing, est-ce que ton "point" ne tomberait pas sur un pixel "anti-aliasé" et récupérerait alors une valeur différente de zéro ?

C'est un peu tiré par les cheveux, mais bon, qui sait? :?

[EDIT]: 'tain Djes, tu m'as pris de vitesse!

Re: Le debut de la fin du bug du Point()

Publié : mer. 05/janv./2011 9:54
par SPH
kernadec a écrit :bonjour
Toujours le même problème avec ma résolution de ouf 1920 1080..
mais en 1024 768 NO ERROR en utilisant POINT(x,y) ainsi qu'avec l'Api getpixel_ avec le code de Dobro


Cordialement
Oui mais si l'Api getpixel_ etait la solution, ca devrait marcher avec ton 1920/1080 !!
A propos, tu as 2 nombres differents en 1920/1080 ou bien le code ne se lance meme pas ?

Re: Le debut de la fin du bug du Point()

Publié : mer. 05/janv./2011 10:02
par SPH
Eliminons les hypotheses sur les pixels PRESQUE noirs avec ca :
Image

Et pour l'histoire de l'antialiasing, ca m'etonnerais que l'antialias provoque un seul pixel de plus sur un tel logo !!

Re: Le debut de la fin du bug du Point()

Publié : mer. 05/janv./2011 11:14
par kelebrindae
Je viens de tester en modifiant les réglages dont j'ai parlé plus haut:
Avec anti-aliasing off => aucune erreur, quelque soit la résolution
avec anti-aliasing x4 => erreurs de comptage

On se rapproche d'une explication, non? Quels réglages as-tu sur ton poste ?

Re: Le debut de la fin du bug du Point()

Publié : mer. 05/janv./2011 12:56
par kernadec
@SPH
le test du code avec "ExamineDesltops"
l'éditeur écrit : exécutable démarré
type exécutable :Windows - x86 (32bit)
Openscreen ne se lance pas.
l'éditeur reste noir et rien ne se passe sinon que la souris répond plus,
j'ai recours "ctrl alt del" pour arrêter le processus.

et pour l'antialiasing s'il y en a un je n'ai pas trouver le moyen de le contrôler.

cordialement