Bonjour,

J'essaie de compiler un programme (fait initialement sous linux) sous windows avec code blocks et mingw. J'utilise les bibliothèques openGL, GTK+ et GtkGlExt. J'ai résolu les problèmes d'installation des librairies grace à l'installateur suivant :
ici

je dois faire face maintenant à des problèmes de portabilité, en effet le code est beaucoup plus chaffouin sous windows...

J'ai des gros problèmes d'affichage : en réduisant le code à :

main.c
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
/**************
* main module *
**************/
 
//librairies
 
#include <stdlib.h>
#include <stdio.h>
#include <gtk/gtk.h>
#include <gdk/gdkgl.h>
#include <gtk/gtkgl.h>
 
//headers
#include "carte.h"
#include "main.h"
 
//variables
GtkWidget * fenetre;					// le widget qui va servir de fenetre
GtkWidget * gl;
 
int main (int argc, char *argv[])//principal
{
    printf("********** start here ****************************\n\n");
    //initialisation GTK+ et openGL
    gtk_init(&argc,&argv);
    //gtk_gl_init_check(&argc,&argv);
    //glutInit(&argc,argv);
    //GUI
    buildGui();
    gtk_widget_show_all(GTK_WIDGET (fenetre));
    gtk_widget_queue_draw(GTK_WIDGET(gl));
    //main loop
    gtk_main ();
    return 0;
}
 
//fonctions principales
void buildGui(void) //construction de l'interface graphique
{
    GdkGLConfig * config;
    //fenetre principale *************************
    fenetre = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(fenetre), "cartographie astronomique");
    gtk_window_set_default_size(GTK_WINDOW(fenetre), 1000, 800);
    gtk_window_set_position (GTK_WINDOW (fenetre), GTK_WIN_POS_NONE);
    //connections
    g_signal_connect(GTK_OBJECT(fenetre), "destroy", G_CALLBACK(gtk_main_quit), NULL);//quitter
    g_signal_connect(GTK_OBJECT(fenetre), "delete_event",	G_CALLBACK(gtk_main_quit), NULL);
    //carte du ciel
    gl = gtk_drawing_area_new();
    //OpenGL via Gtkglext
    config = gdk_gl_config_new_by_mode(GDK_GL_MODE_RGBA | GDK_GL_MODE_DOUBLE);
    gtk_widget_set_gl_capability(GTK_WIDGET(gl), config, NULL, TRUE, GDK_GL_RGBA_TYPE);
    //signaux
    gtk_signal_connect (GTK_OBJECT (gl), "realize", G_CALLBACK(Carte_realize), NULL);
    gtk_signal_connect (GTK_OBJECT (gl), "expose_event", G_CALLBACK(Carte_expose_event), NULL);
    gtk_signal_connect (GTK_OBJECT (gl), "configure_event", G_CALLBACK(Carte_configure_event), NULL);
    gtk_signal_connect (GTK_OBJECT (gl), "motion_notify_event", G_CALLBACK(Carte_motion_notify_event), NULL);
    gtk_signal_connect (GTK_OBJECT (gl), "button_press_event", G_CALLBACK(Carte_button_press_event), NULL);
    gtk_signal_connect (GTK_OBJECT (gl), "button_release_event", G_CALLBACK(Carte_button_release_event), NULL);
    gtk_signal_connect (GTK_OBJECT (gl), "key_press_event", G_CALLBACK(Carte_key_press_event), NULL);
    gtk_signal_connect (GTK_OBJECT (gl), "key_release_event", G_CALLBACK(Carte_key_release_event), NULL);
    gtk_widget_set_events (gl, GDK_EXPOSURE_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
        | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK);
    //GTK_WIDGET_SET_FLAGS (gui->da_Carte, GTK_CAN_FOCUS);//permettre le signal key press et key release
    gtk_container_add(GTK_CONTAINER(fenetre), GTK_WIDGET(gl));
}
carte.c
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
/******************************************************
* fonctions connectées aux signaux de la drawing_area *
******************************************************/
 
// librairies//
#ifdef WIN32
#include <windows.h>
#endif
 
#include <GL/gl.h>
#include <GL/glu.h>
#include <stdio.h>
#include <stdlib.h>
#include <gtk/gtk.h>
#include <gdk/gdkgl.h>
#include <gtk/gtkgl.h>
 
//headers autres/
#include "gl.h"
#include "carte.h"
 
static int KeyPressed = 0;//les touches du clavier
static int ButPressed = 0;//bouton de la souris
static int processing = 0;
static int Souris[2]; //position actuelle de la souris
 
gint Carte_realize (GtkWidget *widget, gpointer data) //premiere apparition du widget
{
    printf("realize\n");
    //récupération du contexte
    GdkGLContext *contexte = gtk_widget_get_gl_context(GTK_WIDGET(widget));
    GdkGLDrawable *surface = gtk_widget_get_gl_drawable(GTK_WIDGET(widget));
    //activation du contexte
    if(gdk_gl_drawable_gl_begin(surface,contexte))
    {
        init();//init openGL
        gdk_gl_drawable_gl_end(surface);// désactivation du contexte
    }
 
    return TRUE;
}
 
gint Carte_configure_event (GtkWidget *widget, GdkEventConfigure *event, gpointer data) //en cas de redimensionnement
{
    printf("configure\n");
    //récupération du contexte
    GdkGLContext *contexte = gtk_widget_get_gl_context(GTK_WIDGET(widget));
    GdkGLDrawable *surface = gtk_widget_get_gl_drawable(GTK_WIDGET(widget));
    //activation du contexte
    if(gdk_gl_drawable_gl_begin(surface,contexte))
    {
        reshape(event->height, event->width);//redimensionnement
        gdk_gl_drawable_gl_end(surface);// désactivation du contexte
    }
    return TRUE;
}
 
gint Carte_expose_event (GtkWidget *widget, gpointer data)//Redessine la zone de dessin en fonction du tracé
{
    printf("expose\n");
    printf("%p pt\n",widget);
    GdkGLContext *contexte1 = gtk_widget_get_gl_context(GTK_WIDGET(widget));
    GdkGLDrawable *surface1 = gtk_widget_get_gl_drawable(GTK_WIDGET(widget));
    //activation du contexte
    if(gdk_gl_drawable_gl_begin(surface1,contexte1))
    {
        draw();//dessin openGL
        gdk_gl_drawable_swap_buffers(surface1);//permutation des tampons
        gdk_gl_drawable_gl_end(surface1);// désactivation du contexte
    }
    return TRUE;
}
 
gint Carte_button_press_event (GtkWidget *widget, GdkEventButton *event)//si on appuis sur le bouton de la souris
{
    ButPressed = 1;
    gtk_grab_add(widget);
    return TRUE;
}
 
gint Carte_button_release_event (GtkWidget *widget, GdkEventButton *event)//si on relache le bouton
{
    ButPressed = 0;
    processing = 0;
    gtk_grab_remove(widget);
    return TRUE;
}
 
gint Carte_motion_notify_event (GtkWidget *widget, GdkEventMotion *event)//si on déplace la souris
{
    gtk_widget_get_pointer(widget, &Souris[0], &Souris[1]);//position de la souris
    if(ButPressed)gtk_widget_queue_draw(GTK_WIDGET(widget));
    return TRUE;
}
 
gint Carte_key_press_event (GtkWidget *widget, GdkEventKey *event)//gestion du clavier
{
    processing = 1;
    return TRUE;
}
 
gint Carte_key_release_event (GtkWidget *widget, GdkEventKey *event)
{
    processing = 0;
    KeyPressed = 0;
    return TRUE;
}
et gl.c
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
/****************************
* fonctions openGL dessin...*
****************************/
 
 
// librairies//
#ifdef WIN32
#include <windows.h>
#endif
 
#include <stdlib.h>
#include <stdio.h>
#include <GL/gl.h>
#include <GL/glu.h>
//#include <GL/glut.h>
 
//headers autres/
#include "gl.h"
 
void init() //initialisation openGL
{
	glClearColor(0.0,0.0,0.0,0.0);
	glShadeModel(GL_SMOOTH);
	glEnable(GL_DEPTH_TEST);
 
 }
 
void reshape(int height, int width)
{
	glViewport(0,0,width,height);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluPerspective(60.0,(GLfloat)width/(GLfloat)height,1.0,1000000.0);
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
}
 
void draw()
{
	printf("draw !\n");
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	glLoadIdentity();
	gluLookAt(0.0,0.0,30.0,0.0,0.0,-1.0,0.0,1.0,0.0);
	glBegin(GL_QUADS);
 
		glColor3f(1.0,0.0,0.0);
		glVertex3f(-10.0,-10.0,0.0);
		glColor3f(0.0,1.0,0.0);
		glVertex3f(-10.0,10.0,0.0);
		glColor3f(0.0,0.0,1.0);
		glVertex3f(10.0,10.0,0.0);
		glColor3f(1.0,1.0,0.0);
		glVertex3f(10.0,-10.0,0.0);
 
	glEnd();
}
J'obtiens une drawingarea transparente qui réagit à la souris mais qui n'affiche rien du tout

J'arrive pas à trouver mon erreur...
surtout que tout bien marche sur linux et que j'ai un exemple quasi identique qui marche correctement sous windows