Bonjour,

J'essaye actuellement d'utiliser LablGlGtk pour un projet. J'ai donc essayé de compiler les exemples fournis sur ma distrib' (Fedora 14).

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
 
open GMain
 
let main () =
  let w = GWindow.window ~title:"LablGL/Gtk" () in
  w#connect#destroy ~callback:Main.quit;
  let area =
    GlGtk.area [`RGBA;`DEPTH_SIZE 1;`DOUBLEBUFFER]
      ~width:500 ~height:500 ~packing:w#add () in
  area#connect#realize ~callback:
    begin fun () ->
      GlMat.mode `projection;
      GlMat.load_identity ();
      GlMat.ortho ~x:(-1.0,1.0) ~y:(-1.0,1.0) ~z:(-1.0,1.0);
    end;
  area#connect#display ~callback:
    begin fun () ->
      GlClear.color (0.0, 0.0, 0.0);
      GlClear.clear [`color];
      GlDraw.color (1.0, 1.0, 1.0);
      GlDraw.begins `polygon;
      GlDraw.vertex ~x:(-0.5) ~y:(-0.5) ();
      GlDraw.vertex ~x:(-0.5) ~y:(0.5) ();
      GlDraw.vertex ~x:(0.5) ~y:(0.5) ();
      GlDraw.vertex ~x:(0.5) ~y:(-0.5) ();
      GlDraw.ends ();
      Gl.flush ();
      area#swap_buffers ()
    end;
  Timeout.add ~ms:10000 ~callback:(fun () -> w#destroy ();false);
  w#show ();
  Main.main ()
 
let _ = main ()
La compilation se passe correctement, par contre lorsque j'exécute le programme il y a une erreur de segmentation.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
(process:14205): GLib-GObject-WARNING **: invalid (NULL) pointer instance
 
(process:14205): GLib-GObject-CRITICAL **: g_signal_connect_data: assertion `G_TYPE_CHECK_INSTANCE (instance)' failed
Erreur de segmentation (core dumped)
J'ai tout de même essayé de faire mon programme

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
(* 
***
Création de la fenêtre
***
Création de différents conteneur
*)
(* GlGtk *)
let area = GlGtk.area [ `RGBA; `DOUBLEBUFFER] 
  ~width:500 
  ~height:400
  ~packing:vbox2#add ()
 
(* Fonction appelée lorsque l'utilisateur appui sur un bouton *) 
(* Les fonctions utilisant OpenGl sont dans un module nommé Troisd *)
let goto3D = 
begin
    Troisd.init_gl();
    area#connect#display ~callback:(fun () ->Troisd.draw_cb(); area#swap_buffers ());
    GMain.Timeout.add ~ms:20 ~callback:(fun () ->Troisd.draw_cb(); area#swap_buffers () ; true);
end
Et la encore j'ai une erreur de segmentation qui vient de la ligne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
GMain.Timeout.add ~ms:20 ~callback:(fun () ->Troisd.draw_cb(); area#swap_buffers () ; true);
Je compile en natif.

Une idée ?