LablGlGtk : Segmentation fault
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:
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:
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:
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:
1 2
|
GMain.Timeout.add ~ms:20 ~callback:(fun () ->Troisd.draw_cb(); area#swap_buffers () ; true); |
Je compile en natif.
Une idée ?