caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* [Caml-list] Problem with Graph module
@ 2002-06-17  1:12 Nicolas FRANCOIS
  2002-06-17 13:23 ` Jun P.FURUSE
  0 siblings, 1 reply; 6+ messages in thread
From: Nicolas FRANCOIS @ 2002-06-17  1:12 UTC (permalink / raw)
  To: Caml List

A strange thing, under Linux : this piece of code :

open Graphics;;
open Random;;

type t_fourmi = {mutable dir : int;
		 mutable x : int;
		 mutable y : int};;

let trace_fourmi_deux_etats n =
  let mouvement = [|(0, 5); (-5, 0); (0, -5); (5, 0)|] in
  let init = open_graph " 800x800+50-50" in
  let ma_fourmi = {dir = 0; x = 349; y = 349} in
  let onestep () =
    if (point_color ma_fourmi.x ma_fourmi.y) = white
    then
      begin
	set_color black;
	ma_fourmi.dir <-
	if ma_fourmi.dir + 1 > 3 then 0 else ma_fourmi.dir + 1
      end
    else
      begin
	set_color white;
	ma_fourmi.dir <-
	if ma_fourmi.dir - 1 < 0 then 3 else ma_fourmi.dir - 1
      end;
    fill_rect ma_fourmi.x ma_fourmi.y 5 5;    
    let (dx, dy) = mouvement.(ma_fourmi.dir) in
      ma_fourmi.x <- ma_fourmi.x + dx;
      ma_fourmi.y <- ma_fourmi.y + dy;
  in
    init;
    for i = 0 to n do
      onestep ();
      for j = 1 to 10000 do begin end done
    done;;

trace_fourmi_deux_etats 10000;;


works perfectly in camllight (with a few modifications to adapt the code),
but not in Ocaml. The graphic window opens well, but the test 

if (point_color ma_fourmi.x ma_fourmi.y) = white

is allways false under Ocaml.

Can you see the problem ?????

Thanks.

-- 

                   Nicolas FRANCOIS
            http://nicolas.francois.free.fr
 A TRUE Klingon programmer does NOT comment his code
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners


^ permalink raw reply	[flat|nested] 6+ messages in thread

* (no subject)
  2002-06-17  1:12 [Caml-list] Problem with Graph module Nicolas FRANCOIS
@ 2002-06-17 13:23 ` Jun P.FURUSE
  2002-06-17 17:47   ` [Caml-list] Nicolas FRANCOIS
  0 siblings, 1 reply; 6+ messages in thread
From: Jun P.FURUSE @ 2002-06-17 13:23 UTC (permalink / raw)
  To: nicolas.francois; +Cc: caml-list

Hello,

> if (point_color ma_fourmi.x ma_fourmi.y) = white
> is allways false under Ocaml.

If the following code says "BUG" in your environment, I am afraid that
there is a bug inside the graphics library. In such case, could you
send me the result of the command xdpyinfo in your environment ? 

(* ocamlc -o testgraphics graphics.cma testgraphics.ml *)
open Graphics
let _ = 
    open_graph "";
    if point_color 0 0 = white then 
      prerr_endline "OK"
    else prerr_endline "BUG"
;;

--
Jun
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Caml-list] Re:
  2002-06-17 13:23 ` Jun P.FURUSE
@ 2002-06-17 17:47   ` Nicolas FRANCOIS
  2002-06-18  9:48     ` [Caml-list] Re: Problem with Graph module Jun P.FURUSE
  0 siblings, 1 reply; 6+ messages in thread
From: Nicolas FRANCOIS @ 2002-06-17 17:47 UTC (permalink / raw)
  To: Jun P.FURUSE; +Cc: caml-list

[-- Attachment #1: Type: text/plain, Size: 876 bytes --]

Le Mon, 17 Jun 2002 15:23:09 +0200 (CEST) "Jun P.FURUSE"
<Jun.Furuse@inria.fr> a écrit :

> Hello,
> 
> > if (point_color ma_fourmi.x ma_fourmi.y) = white
> > is allways false under Ocaml.
> 
> If the following code says "BUG" in your environment, I am afraid that
> there is a bug inside the graphics library. In such case, could you
> send me the result of the command xdpyinfo in your environment ? 
> 
> (* ocamlc -o testgraphics graphics.cma testgraphics.ml *)
> open Graphics
> let _ = 
>     open_graph "";
>     if point_color 0 0 = white then 
>       prerr_endline "OK"
>     else prerr_endline "BUG"
> ;;

I received the bad answer :-(

You'll find the xdpyinfo output in attachment.

What can I do, boss ? Please !!!!!

\bye

-- 

                   Nicolas FRANCOIS
            http://nicolas.francois.free.fr
 A TRUE Klingon programmer does NOT comment his code

[-- Attachment #2: xdpyinfo.out --]
[-- Type: application/octet-stream, Size: 9720 bytes --]

name of display:    :0.0
version number:    11.0
vendor string:    The XFree86 Project, Inc
vendor release number:    40100000
XFree86 version: 4.1.0
maximum request size:  4194300 bytes
motion buffer size:  256
bitmap unit, bit order, padding:    32, LSBFirst, 32
image byte order:    LSBFirst
number of supported pixmap formats:    7
supported pixmap formats:
    depth 1, bits_per_pixel 1, scanline_pad 32
    depth 4, bits_per_pixel 8, scanline_pad 32
    depth 8, bits_per_pixel 8, scanline_pad 32
    depth 15, bits_per_pixel 16, scanline_pad 32
    depth 16, bits_per_pixel 16, scanline_pad 32
    depth 24, bits_per_pixel 32, scanline_pad 32
    depth 32, bits_per_pixel 32, scanline_pad 32
keycode range:    minimum 8, maximum 255
focus:  window 0x180000e, revert to Parent
number of extensions:    26
    BIG-REQUESTS
    DOUBLE-BUFFER
    DPMS
    Extended-Visual-Information
    FontCache
    GLX
    LBX
    MIT-SCREEN-SAVER
    MIT-SHM
    MIT-SUNDRY-NONSTANDARD
    RENDER
    SECURITY
    SGI-GLX
    SHAPE
    SYNC
    TOG-CUP
    XC-APPGROUP
    XC-MISC
    XFree86-Bigfont
    XFree86-DRI
    XFree86-Misc
    XFree86-VidModeExtension
    XInputExtension
    XKEYBOARD
    XTEST
    XVideo
default screen number:    0
number of screens:    1

screen #0:
  dimensions:    1280x1024 pixels (433x347 millimeters)
  resolution:    75x75 dots per inch
  depths (7):    16, 1, 4, 8, 15, 24, 32
  root window id:    0x4d
  depth of root window:    16 planes
  number of colormaps:    minimum 1, maximum 1
  default colormap:    0x20
  default number of colormap cells:    64
  preallocated pixels:    black 0, white 65535
  options:    backing-store NO, save-unders NO
  largest cursor:    64x64
  current input event mask:    0x58007f
    KeyPressMask             KeyReleaseMask           ButtonPressMask          
    ButtonReleaseMask        EnterWindowMask          LeaveWindowMask          
    PointerMotionMask        SubstructureNotifyMask   SubstructureRedirectMask 
    PropertyChangeMask       
  number of visuals:    32
  default visual id:  0x23
  visual:
    visual id:    0x23
    class:    TrueColor
    depth:    16 planes
    available colormap entries:    64 per subfield
    red, green, blue masks:    0xf800, 0x7e0, 0x1f
    significant bits in color specification:    6 bits
  visual:
    visual id:    0x24
    class:    TrueColor
    depth:    16 planes
    available colormap entries:    64 per subfield
    red, green, blue masks:    0xf800, 0x7e0, 0x1f
    significant bits in color specification:    6 bits
  visual:
    visual id:    0x25
    class:    TrueColor
    depth:    16 planes
    available colormap entries:    64 per subfield
    red, green, blue masks:    0xf800, 0x7e0, 0x1f
    significant bits in color specification:    6 bits
  visual:
    visual id:    0x26
    class:    TrueColor
    depth:    16 planes
    available colormap entries:    64 per subfield
    red, green, blue masks:    0xf800, 0x7e0, 0x1f
    significant bits in color specification:    6 bits
  visual:
    visual id:    0x27
    class:    TrueColor
    depth:    16 planes
    available colormap entries:    64 per subfield
    red, green, blue masks:    0xf800, 0x7e0, 0x1f
    significant bits in color specification:    6 bits
  visual:
    visual id:    0x28
    class:    TrueColor
    depth:    16 planes
    available colormap entries:    64 per subfield
    red, green, blue masks:    0xf800, 0x7e0, 0x1f
    significant bits in color specification:    6 bits
  visual:
    visual id:    0x29
    class:    TrueColor
    depth:    16 planes
    available colormap entries:    64 per subfield
    red, green, blue masks:    0xf800, 0x7e0, 0x1f
    significant bits in color specification:    6 bits
  visual:
    visual id:    0x2a
    class:    TrueColor
    depth:    16 planes
    available colormap entries:    64 per subfield
    red, green, blue masks:    0xf800, 0x7e0, 0x1f
    significant bits in color specification:    6 bits
  visual:
    visual id:    0x2b
    class:    TrueColor
    depth:    16 planes
    available colormap entries:    64 per subfield
    red, green, blue masks:    0xf800, 0x7e0, 0x1f
    significant bits in color specification:    6 bits
  visual:
    visual id:    0x2c
    class:    TrueColor
    depth:    16 planes
    available colormap entries:    64 per subfield
    red, green, blue masks:    0xf800, 0x7e0, 0x1f
    significant bits in color specification:    6 bits
  visual:
    visual id:    0x2d
    class:    TrueColor
    depth:    16 planes
    available colormap entries:    64 per subfield
    red, green, blue masks:    0xf800, 0x7e0, 0x1f
    significant bits in color specification:    6 bits
  visual:
    visual id:    0x2e
    class:    TrueColor
    depth:    16 planes
    available colormap entries:    64 per subfield
    red, green, blue masks:    0xf800, 0x7e0, 0x1f
    significant bits in color specification:    6 bits
  visual:
    visual id:    0x2f
    class:    TrueColor
    depth:    16 planes
    available colormap entries:    64 per subfield
    red, green, blue masks:    0xf800, 0x7e0, 0x1f
    significant bits in color specification:    6 bits
  visual:
    visual id:    0x30
    class:    TrueColor
    depth:    16 planes
    available colormap entries:    64 per subfield
    red, green, blue masks:    0xf800, 0x7e0, 0x1f
    significant bits in color specification:    6 bits
  visual:
    visual id:    0x31
    class:    TrueColor
    depth:    16 planes
    available colormap entries:    64 per subfield
    red, green, blue masks:    0xf800, 0x7e0, 0x1f
    significant bits in color specification:    6 bits
  visual:
    visual id:    0x32
    class:    TrueColor
    depth:    16 planes
    available colormap entries:    64 per subfield
    red, green, blue masks:    0xf800, 0x7e0, 0x1f
    significant bits in color specification:    6 bits
  visual:
    visual id:    0x33
    class:    DirectColor
    depth:    16 planes
    available colormap entries:    64 per subfield
    red, green, blue masks:    0xf800, 0x7e0, 0x1f
    significant bits in color specification:    6 bits
  visual:
    visual id:    0x34
    class:    DirectColor
    depth:    16 planes
    available colormap entries:    64 per subfield
    red, green, blue masks:    0xf800, 0x7e0, 0x1f
    significant bits in color specification:    6 bits
  visual:
    visual id:    0x35
    class:    DirectColor
    depth:    16 planes
    available colormap entries:    64 per subfield
    red, green, blue masks:    0xf800, 0x7e0, 0x1f
    significant bits in color specification:    6 bits
  visual:
    visual id:    0x36
    class:    DirectColor
    depth:    16 planes
    available colormap entries:    64 per subfield
    red, green, blue masks:    0xf800, 0x7e0, 0x1f
    significant bits in color specification:    6 bits
  visual:
    visual id:    0x37
    class:    DirectColor
    depth:    16 planes
    available colormap entries:    64 per subfield
    red, green, blue masks:    0xf800, 0x7e0, 0x1f
    significant bits in color specification:    6 bits
  visual:
    visual id:    0x38
    class:    DirectColor
    depth:    16 planes
    available colormap entries:    64 per subfield
    red, green, blue masks:    0xf800, 0x7e0, 0x1f
    significant bits in color specification:    6 bits
  visual:
    visual id:    0x39
    class:    DirectColor
    depth:    16 planes
    available colormap entries:    64 per subfield
    red, green, blue masks:    0xf800, 0x7e0, 0x1f
    significant bits in color specification:    6 bits
  visual:
    visual id:    0x3a
    class:    DirectColor
    depth:    16 planes
    available colormap entries:    64 per subfield
    red, green, blue masks:    0xf800, 0x7e0, 0x1f
    significant bits in color specification:    6 bits
  visual:
    visual id:    0x3b
    class:    DirectColor
    depth:    16 planes
    available colormap entries:    64 per subfield
    red, green, blue masks:    0xf800, 0x7e0, 0x1f
    significant bits in color specification:    6 bits
  visual:
    visual id:    0x3c
    class:    DirectColor
    depth:    16 planes
    available colormap entries:    64 per subfield
    red, green, blue masks:    0xf800, 0x7e0, 0x1f
    significant bits in color specification:    6 bits
  visual:
    visual id:    0x3d
    class:    DirectColor
    depth:    16 planes
    available colormap entries:    64 per subfield
    red, green, blue masks:    0xf800, 0x7e0, 0x1f
    significant bits in color specification:    6 bits
  visual:
    visual id:    0x3e
    class:    DirectColor
    depth:    16 planes
    available colormap entries:    64 per subfield
    red, green, blue masks:    0xf800, 0x7e0, 0x1f
    significant bits in color specification:    6 bits
  visual:
    visual id:    0x3f
    class:    DirectColor
    depth:    16 planes
    available colormap entries:    64 per subfield
    red, green, blue masks:    0xf800, 0x7e0, 0x1f
    significant bits in color specification:    6 bits
  visual:
    visual id:    0x40
    class:    DirectColor
    depth:    16 planes
    available colormap entries:    64 per subfield
    red, green, blue masks:    0xf800, 0x7e0, 0x1f
    significant bits in color specification:    6 bits
  visual:
    visual id:    0x41
    class:    DirectColor
    depth:    16 planes
    available colormap entries:    64 per subfield
    red, green, blue masks:    0xf800, 0x7e0, 0x1f
    significant bits in color specification:    6 bits
  visual:
    visual id:    0x42
    class:    DirectColor
    depth:    16 planes
    available colormap entries:    64 per subfield
    red, green, blue masks:    0xf800, 0x7e0, 0x1f
    significant bits in color specification:    6 bits

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Caml-list] Re: Problem with Graph module
  2002-06-17 17:47   ` [Caml-list] Nicolas FRANCOIS
@ 2002-06-18  9:48     ` Jun P.FURUSE
  2002-06-18 17:01       ` Nicolas FRANCOIS
  0 siblings, 1 reply; 6+ messages in thread
From: Jun P.FURUSE @ 2002-06-18  9:48 UTC (permalink / raw)
  To: nicolas.francois; +Cc: caml-list, ecc, Andreas.Eder

Hello,

I thank people who sent their xdpyinfo result.

> Le Mon, 17 Jun 2002 15:23:09 +0200 (CEST) "Jun P.FURUSE"
> <Jun.Furuse@inria.fr> a écrit :
> 
> > Hello,
> > 
> > > if (point_color ma_fourmi.x ma_fourmi.y) = white
> > > is allways false under Ocaml.
> > 
> > If the following code says "BUG" in your environment, I am afraid that
> > there is a bug inside the graphics library. In such case, could you
> > send me the result of the command xdpyinfo in your environment ? 
> > 
> > (* ocamlc -o testgraphics graphics.cma testgraphics.ml *)
> > open Graphics
> > let _ = 
> >     open_graph "";
> >     if point_color 0 0 = white then 
> >       prerr_endline "OK"
> >     else prerr_endline "BUG"
> > ;;

I verified that this code prints out "BUG" when X display has less
than 24bits color depth. In such environment, the colour mapping from
Graphics to X is not one-to-one. This means that point_color may not
always return the exact colour which you drew on the screen. 
For example, in an X display of 15bpp, the Graphics colour 0xffffff
and 0xf8f8f8 are translated to the same X white colour. 
This is also true for the default white background color of Graphics. 
point_color returns 0xf8f8f8, not 0xffffff, this is why the above
code prints out "BUG".

In Camllight, the translation between Caml colour and X colour
performs communication between programs and the X server. Since it is
highly expensive operation, the colour translation of O'Caml Graphics
is rewritten, so that it would never ask the X server about
colours. It improves the speed of colour query impressively. 
Unfortunately, the both colour translation code do not return always
the same result. The different behavior of the Nicolas' O'Caml and
Camllight programs can be explained by this difference of colour
translation.

I think this does not mean the new colour translation of O'Caml is
buggy. Even in Camllight, the same things can happen, unless the colour
translation is one-to-one. (It happens less, but not never.)

The important things (which should be noted in graphics.mli) are that

  * you may get different colour index from one you draw, 

  * the colour indices predefined in Graphics for the basic colours 
    such as white, blue, red, etc can be just canonical candidate
    indices for them.

You should not compare these colour indices against the colours
got from the screen. For example, in Nicolas' program, instead of
comparing Graphics.white, we should use the colour index obtained
from the screen  at the begining of the program:

      let screen_white = point_color 0 0 
      (* this can be different from Graphics.white *)

Regards,
--
Jun
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Caml-list] Re: Problem with Graph module
  2002-06-18  9:48     ` [Caml-list] Re: Problem with Graph module Jun P.FURUSE
@ 2002-06-18 17:01       ` Nicolas FRANCOIS
  2002-06-18 23:21         ` Nicolas FRANCOIS
  0 siblings, 1 reply; 6+ messages in thread
From: Nicolas FRANCOIS @ 2002-06-18 17:01 UTC (permalink / raw)
  To: Jun P.FURUSE; +Cc: Caml List

Le Tue, 18 Jun 2002 11:48:31 +0200 (CEST) "Jun P.FURUSE"
<Jun.Furuse@inria.fr> a écrit :


> I verified that this code prints out "BUG" when X display has less
> than 24bits color depth. In such environment, the colour mapping from
> Graphics to X is not one-to-one. This means that point_color may not
> always return the exact colour which you drew on the screen. 
> For example, in an X display of 15bpp, the Graphics colour 0xffffff
> and 0xf8f8f8 are translated to the same X white colour. 
> This is also true for the default white background color of Graphics. 
> point_color returns 0xf8f8f8, not 0xffffff, this is why the above
> code prints out "BUG".

OK. Now I have this simple problem : I can use Direct Rendering from X
with my Voodoo card in 15 bits, and correct color translation in 24 bits.
is that right ?
 
> In Camllight, the translation between Caml colour and X colour
> performs communication between programs and the X server. Since it is
> highly expensive operation, the colour translation of O'Caml Graphics
> is rewritten, so that it would never ask the X server about
> colours. It improves the speed of colour query impressively. 
> Unfortunately, the both colour translation code do not return always
> the same result. The different behavior of the Nicolas' O'Caml and
> Camllight programs can be explained by this difference of colour
> translation.

Who said computer science is not an exact one ?
 
> I think this does not mean the new colour translation of O'Caml is
> buggy. Even in Camllight, the same things can happen, unless the colour
> translation is one-to-one. (It happens less, but not never.)
> 
> The important things (which should be noted in graphics.mli) are that
> 
>   * you may get different colour index from one you draw, 
> 
>   * the colour indices predefined in Graphics for the basic colours 
>     such as white, blue, red, etc can be just canonical candidate
>     indices for them.
> 
> You should not compare these colour indices against the colours
> got from the screen. For example, in Nicolas' program, instead of
> comparing Graphics.white, we should use the colour index obtained
> from the screen  at the begining of the program:
> 
>       let screen_white = point_color 0 0 
>       (* this can be different from Graphics.white *)

Great. Thanks for the tip. Euh, and what if I have to test several colors
? Oh, yes, here it is :

let screen_from_color c =
  set_color x;
  plot 0 0;
  point_color 0 0;;
 
Right ? I'll try it now.

\bye, and thanks again.

-- 

                   Nicolas FRANCOIS
            http://nicolas.francois.free.fr
 A TRUE Klingon programmer does NOT comment his code
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Caml-list] Re: Problem with Graph module
  2002-06-18 17:01       ` Nicolas FRANCOIS
@ 2002-06-18 23:21         ` Nicolas FRANCOIS
  0 siblings, 0 replies; 6+ messages in thread
From: Nicolas FRANCOIS @ 2002-06-18 23:21 UTC (permalink / raw)
  To: caml-list

Le Tue, 18 Jun 2002 19:01:39 +0200 Nicolas FRANCOIS (AKA El Bofo)
<nicolas.francois@free.fr> a écrit :

> Great. Thanks for the tip. Euh, and what if I have to test several
> colors? Oh, yes, here it is :
> 
> let screen_from_color c =
>   set_color x;
>   plot 0 0;
>   point_color 0 0;;
>  
> Right ? I'll try it now.

A better version (known to work, it ran just a few seconds ago in front of
my eyes ;-) :

let color_from_screen c =
  let o = point_color 0 0 in
    set_color c;
    plot 0 0;
    let s = point_color 0 0 in
      set_color o;
      plot 0 0;
      s;;

Just keep the place exactly in the same state you would like to find it...

Release 1.0 for monday.

Anyway, if you don't know the Langton ant, you should try it. It's
amazing. And the generalizes ones are not bad, too.

\bye

-- 

                   Nicolas FRANCOIS
            http://nicolas.francois.free.fr
 A TRUE Klingon programmer does NOT comment his code
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2002-06-18 23:13 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-06-17  1:12 [Caml-list] Problem with Graph module Nicolas FRANCOIS
2002-06-17 13:23 ` Jun P.FURUSE
2002-06-17 17:47   ` [Caml-list] Nicolas FRANCOIS
2002-06-18  9:48     ` [Caml-list] Re: Problem with Graph module Jun P.FURUSE
2002-06-18 17:01       ` Nicolas FRANCOIS
2002-06-18 23:21         ` Nicolas FRANCOIS

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).