Bonsoir/Bonjour,


Je suis actuellement en train de suivre un cours sur l'utilisation de la sdl avec opengl. L'exercice était d'apprendre à faire un triangle, voici le code:

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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#ifdef WIN32
#include <GL/glew.h>
 
#else
#define GL3_PROTOTYPES 1
#include <GL3/gl3.h>
 
#endif
 
#include <SDL2/SDL.h>
#include <iostream>
 
 
int main(int argc, char **argv)
{
    // Notre fenêtre
 
    SDL_Window* fenetre(0);
    SDL_GLContext contexteOpenGL(0);
 
    SDL_Event evenements;
    bool terminer(false);
 
 
    // Initialisation de la SDL
 
    if(SDL_Init(SDL_INIT_VIDEO) < 0)
    {
        std::cout << "Erreur lors de l'initialisation de la SDL : " << SDL_GetError() << std::endl;
        SDL_Quit();
 
        return -1;
    }
 
 
    // Version d'OpenGL
 
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1);
 
 
    // Double Buffer
 
    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
    SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
 
 
    // Création de la fenêtre
 
    fenetre = SDL_CreateWindow("Test SDL 2.0", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, SDL_WINDOW_SHOWN | SDL_WINDOW_OPENGL);
 
    if(fenetre == 0)
    {
        std::cout << "Erreur lors de la creation de la fenetre : " << SDL_GetError() << std::endl;
        SDL_Quit();
 
        return -1;
    }
 
 
    // Création du contexte OpenGL
 
    contexteOpenGL = SDL_GL_CreateContext(fenetre);
 
    if(contexteOpenGL == 0)
    {
        std::cout << SDL_GetError() << std::endl;
        SDL_DestroyWindow(fenetre);
        SDL_Quit();
 
        return -1;
    }
 
 
    #ifdef WIN32
 
        // On initialise GLEW
 
        GLenum initialisationGLEW( glewInit() );
 
 
        // Si l'initialisation a échouée :
 
        if(initialisationGLEW != GLEW_OK)
        {
            // On affiche l'erreur grâce à la fonction : glewGetErrorString(GLenum code)
 
            std::cout << "Erreur d'initialisation de GLEW : " << glewGetErrorString(initialisationGLEW) << std::endl;
 
 
            // On quitte la SDL
 
            SDL_GL_DeleteContext(contexteOpenGL);
            SDL_DestroyWindow(fenetre);
            SDL_Quit();
 
            return -1;
        }
 
    #endif
 
 
    // Vertices et coordonnées
 
    float vertices[] = {-0.5, -0.5,   0.0, 0.5,   0.5, -0.5};
 
 
    // Boucle principale
 
    while(!terminer)
    {
        // Gestion des évènements
 
        SDL_WaitEvent(&evenements);
 
        if(evenements.window.event == SDL_WINDOWEVENT_CLOSE)
            terminer = true;
 
 
        // Nettoyage de l'écran
 
        glClear(GL_COLOR_BUFFER_BIT);
 
 
        // On remplie puis on active le tableau Vertex Attrib 0
 
        glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, vertices);
        glEnableVertexAttribArray(0);
 
 
        // On affiche le triangle
 
        glDrawArrays(GL_TRIANGLES, 0, 3);
 
 
        // On désactive le tableau Vertex Attrib puisque l'on n'en a plus besoin
 
        glDisableVertexAttribArray(0);
 
 
        // Actualisation de la fenêtre
 
        SDL_GL_SwapWindow(fenetre);
    }
 
 
    // On quitte la SDL
 
    SDL_GL_DeleteContext(contexteOpenGL);
    SDL_DestroyWindow(fenetre);
    SDL_Quit();
 
    return 0;
}
J'obtiens les erreurs suivantes:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
||=== Tuto, Debug ===|
obj\Debug\main.o||In function `SDL_main':|
C:\Users\PC-HP\Desktop\OpenGL\Tuto\main.cpp|122|undefined reference to `glClear@4'|
C:\Users\PC-HP\Desktop\OpenGL\Tuto\main.cpp|133|undefined reference to `glDrawArrays@12'|
||=== Build finished: 2 errors, 0 warnings (0 minutes, 2 seconds) ===|
J'ai bien mis les .dll dans le dossier ou se trouve mon cpp et mon executable, et j'ai également "linké" les lib (.a).

Je tiens également à préciser que je ne comprends pas l'intégralité du code (notamment les #ifdef que je n'avais jamais vu auparavant)

Merci d'avance de l'aide !