Le debut de la fin du bug du Point()

Programmation d'applications complexes
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Le debut de la fin du bug du Point()

Message 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

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

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

Message par Backup »

yes ! bug :

Image
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

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

Message 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
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
venom
Messages : 3137
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

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

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






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
Noos88
Messages : 59
Inscription : lun. 14/juin/2010 19:16
Localisation : Belrupt (Vosges)

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

Message 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
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

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

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

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

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

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

Message 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

Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

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

Message 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().
Avatar de l’utilisateur
Cool Dji
Messages : 1126
Inscription : ven. 05/sept./2008 11:42
Localisation : Besançon
Contact :

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

Message 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 !
Only PureBasic makes it possible
kelebrindae
Messages : 579
Inscription : ven. 11/mai/2007 15:21

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

Message 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!
Les idées sont le souvenir de choses qui ne se sont pas encore produites.
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

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

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

!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
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

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

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

!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
kelebrindae
Messages : 579
Inscription : ven. 11/mai/2007 15:21

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

Message 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 ?
Les idées sont le souvenir de choses qui ne se sont pas encore produites.
Avatar de l’utilisateur
kernadec
Messages : 1606
Inscription : ven. 25/avr./2008 11:14

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

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