Bonjour,
Ça fait maintenant plusieurs jours que je m'arrache les cheveux sur un message d'erreur que je reçois provenant de mon fragment Shader supposé prendre en charge une lumière.
Voici mon fragment shader complet :
Et voici précisément le bout de code qui pose problème :
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 #version 330 core struct LightSource { unsigned int mode; vec3 position; vec3 ambient; vec3 diffuse; vec3 specular; }; struct Material { float ambient; float diffuse; float specular; float shininess; }; uniform sampler2D tex; // Sampler2D pour l'affichage de la texture uniform LightSource lightSource; // Une lumiere uniform vec3 cameraPosition; // Valeurs interpolées à partir du vertex shader in vec2 UV; layout(location = 0) out vec3 color; in vec3 vertexPositionWorldspace; in vec3 vertexNormalWorldspace; void main() { // Pour l'instant mes matériaux refettent la lumière au max Material material; material.ambient = 1.; material.diffuse = 1.; material.specular = 1.; material.shininess = 30.; // Calcul de la composante ambient de la lumière vec3 ambient = material.ambient * lightSource.ambient; vec3 L = normalize(lightSource.position - vertexPositionWorldspace); // Light direction vec3 V = normalize(cameraPosition - vertexPositionWorldspace); // View direction float LdotN = max(0, dot(L,vertexNormalWorldspace)); // Calcul de la composante diffuse de la lumière float diffuse = material.diffuse * LdotN; float specular = 0; if(LdotN > 0.0) { vec3 H = normalize(L + V); //Halfway specular = material.specular * pow(max(0, dot(H, vertexNormalWorldspace)), material.shininess); } float lightIntensity = ambient + diffuse + specular; color = texture2D(tex, UV.st).rgb * lightIntensity; }
Des que ce bout de code est activé je reçoit un message me disant que :
Code : Sélectionner tout - Visualiser dans une fenêtre à part pow(max(0, dot(H, vertexNormalWorldspace)), material.shininess)
An internal opengl call failed in Shader.cpp (494) : GL_INVALID_OPERATION, the specified operation is not allowed in the current state
Et là je boque... j'ai beau lire relire et re relire, je ne voit pas ce qui cloche. La compilation se passe tres bien, c'est des que l'objet s'affiche que je me fait insulter.
Quelqu'un a une idée ?
Partager