Bonsoir tout le monde,

j'ai un petit souci concernant le passage d'un tableau en paramètre dans une méthode pour un usage externe (en dehors de la méthode main), le contenu de cette méthode se comporte bizarrement, et j'avoue que ça me laisse songeur si je dois poster ce problème dans la rubrique (OpenGL) ou (C++ débutant) vu que je me sens vraiment impliqué par la seconde. Voici le code pour que vous puissiez bien comprendre :

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
 
void methodeA(const float (&vertices)[6])
{
	GLuint vao;
    GLuint vbo;
    glGenVertexArrays(1, &vao);
    glBindVertexArray(vao);
 
    glGenBuffers(1, &vbo);
    glBindBuffer(GL_ARRAY_BUFFER, vbo);
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
 
    glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0);
    glEnableVertexAttribArray(0);
 
    glBindVertexArray(0);
}
 
 
void methodeB()
{
    const float vertices[]={0.0f,  0.5f,0.5f, -0.5f,-0.5f, -0.5f};
 
    GLuint vao;
    GLuint vbo;
    glGenVertexArrays(1, &vao);
    glBindVertexArray(vao);
 
    glGenBuffers(1, &vbo);
    glBindBuffer(GL_ARRAY_BUFFER, vbo);
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
 
    glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0);
    glEnableVertexAttribArray(0);
 
    glBindVertexArray(0);
}
 
 
void methodeC(const float vertices[])
{
	GLuint vao;
    GLuint vbo;
    glGenVertexArrays(1, &vao);
    glBindVertexArray(vao);
 
    glGenBuffers(1, &vbo);
    glBindBuffer(GL_ARRAY_BUFFER, vbo);
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
 
    glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0);
    glEnableVertexAttribArray(0);
 
    glBindVertexArray(0);
}
 
 
void methodeD(const float* vertices)
{
	GLuint vao;
    GLuint vbo;
    glGenVertexArrays(1, &vao);
    glBindVertexArray(vao);
 
    glGenBuffers(1, &vbo);
    glBindBuffer(GL_ARRAY_BUFFER, vbo);
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
 
    glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0);
    glEnableVertexAttribArray(0);
 
    glBindVertexArray(0);
}
 
int main()
{
 
    /************************CODE**********************************/
 
     const float vertices[]={0.0f,  0.5f,0.5f, -0.5f,-0.5f, -0.5f};
 
     methodeA(vertices);  //Fonctionne correctement (passage par référence)
     methodeB();          //Fonctionne correctement (vertices à l'intérieur de la méthode)
     methodeC(vertices);  //Ne fonctionne pas (passage par copie tableau normal array[])
     methodeD(vertices);  //Ne fonctionne pas (passage par copie tableau pointeur array*)
 
    /************************CODE***********************************/
 
	return 0;
}
Pour mieux comprendre mon problème, j'ai essayé 4 méthodes pour gérer les (VAOs/VBOs) et dessiner un triangle, seul la 1ere et la 2eme ont fonctionné, et j'ignore pourquoi ce n'est pas le cas deux autres. qu'est ce qui ne va pas d'après vous avec ces deux dernières ? Merci pour votre aide