j'ai fait des tests et c'est une partie des fonctions gtk qui foirent :
///////////
GdkGLConfig *glconfig;
gint major, minor;
mesh_info *info;
GtkWidget *window;
GtkWidget *vbox, *hbox, *label;
GtkWidget *drawing_area;
GtkWidget *button;
if (!gdk_gl_query_extension ())
{
MessageBox(NULL,"\n*** OpenGL is not supported.\n","info",MB_OK);
exit (1);
}
gdk_gl_query_version (&major, &minor);
glconfig = gdk_gl_config_new_by_mode( (GdkGLConfigMode) (GDK_GL_MODE_RGB | GDK_GL_MODE_DOUBLE | GDK_GL_MODE_DEPTH));
if (glconfig == NULL)
{
MessageBox(NULL,"\n*** Cannot find the double-buffered visual.\n","info",MB_OK);
MessageBox(NULL,"\n*** Trying single-buffered visual.\n","info",MB_OK);
glconfig = gdk_gl_config_new_by_mode ((GdkGLConfigMode) (GDK_GL_MODE_RGB | GDK_GL_MODE_DEPTH));
if (glconfig == NULL)
{
MessageBox(NULL,"\n*** No appropriate OpenGL-capable visual found.\n","info",MB_OK);
exit (1);
}
}
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_resizable(GTK_WINDOW(window),FALSE);
gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
gtk_window_move(GTK_WINDOW(window), (int)(( GetSystemMetrics(SM_CXFULLSCREEN)-GetSystemMetrics(SM_CYFULLSCREEN))/2),0);
gtk_window_set_title (GTK_WINDOW (window), "Affiche de la generation");
gtk_signal_connect_object (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_show_all), GTK_OBJECT (fen2dC));
gtk_signal_connect_object (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), GTK_OBJECT (window));
gtk_signal_connect_object (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_main_quit), NULL);
vbox = gtk_vbox_new (FALSE, 0);
gtk_container_add (GTK_CONTAINER (window), vbox);
gtk_widget_show (vbox);
drawing_area = gtk_drawing_area_new ();
gtk_widget_set_size_request (drawing_area, GetSystemMetrics(SM_CYFULLSCREEN)-50, GetSystemMetrics(SM_CYFULLSCREEN)-50);
gtk_widget_set_gl_capability (drawing_area, glconfig, NULL, TRUE, GDK_GL_RGBA_TYPE);
gtk_box_pack_start (GTK_BOX (vbox), drawing_area, TRUE, TRUE, 0);
gtk_widget_set_events(drawing_area,GDK_EXPOSURE_MASK|GDK_BUTTON_PRESS_MASK|GDK_BUTTON_RELEASE_MASK|GDK_POINTER_MOTION_MASK|GDK_POINTER_MOTION_HINT_MASK);
g_signal_connect (G_OBJECT(drawing_area), "expose_event", G_CALLBACK(expose), NULL);
g_signal_connect (G_OBJECT(drawing_area), "configure_event", G_CALLBACK(configure), NULL);
g_signal_connect (G_OBJECT(drawing_area), "button_press_event", G_CALLBACK(button_press), NULL);
g_signal_connect (G_OBJECT(drawing_area), "motion_notify_event",G_CALLBACK(motion_notify), NULL);
info = (mesh_info*)g_malloc(sizeof(mesh_info));
info->do_init = TRUE;
info->beginx = 0;
info->beginy = 0;
info->zoom = 30;
g_object_set_data(G_OBJECT(drawing_area), "mesh_info", info);
gtk_widget_show (drawing_area);
button = gtk_button_new_with_label("Retour");
gtk_signal_connect_object (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy), GTK_OBJECT (window));
gtk_signal_connect_object (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (gtk_main_quit), NULL);
gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
gtk_widget_show(button);
hbox = gtk_hbox_new (FALSE, 6);
gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0);
gtk_widget_show (hbox);
char buff[50];
// int precision = 5;
// int decimal=0, sign=0;
label = gtk_label_new ("% :");
gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
gtk_label_set_justify( GTK_LABEL (label),GTK_JUSTIFY_CENTER );
gtk_widget_show (label);
label = gtk_label_new ("0.0");
gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
itoa((int)PVol,buff,10);
gtk_label_set_text( GTK_LABEL (label),buff );
gtk_label_set_justify( GTK_LABEL (label),GTK_JUSTIFY_CENTER );
gtk_widget_show (label);
label = gtk_label_new ("Nbre spheres :");
gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
gtk_label_set_justify( GTK_LABEL (label),GTK_JUSTIFY_CENTER );
gtk_widget_show (label);
label = gtk_label_new ("0");
gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
itoa(NbSpheres,buff,10);
gtk_label_set_text( GTK_LABEL (label),buff );
gtk_label_set_justify( GTK_LABEL (label),GTK_JUSTIFY_CENTER );
gtk_widget_show (label);
label = gtk_label_new ("Duree calc. :");
gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
gtk_label_set_justify( GTK_LABEL (label),GTK_JUSTIFY_CENTER );
gtk_widget_show (label);
label = gtk_label_new ("0");
gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
itoa(elapsed_time,buff,10);
gtk_label_set_text( GTK_LABEL (label),buff );
gtk_label_set_justify( GTK_LABEL (label),GTK_JUSTIFY_CENTER );
gtk_widget_show (label);
gtk_widget_show (window);
je fais les include :
#include <gtk/gtk.h>
#include <gdk/gdkgl.h>
#include <gtk/gtkgl.h>
....////////
j'ai testé sur un autre projet et ça fonctionne... donc je suis désespéré...