GL_INVALID_OPERATION en utilisant pow
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 :
Code:
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;
} |
Et voici précisément le bout de code qui pose problème :
Code:
pow(max(0, dot(H, vertexNormalWorldspace)), material.shininess)
Des que ce bout de code est activé je reçoit un message me disant que :
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 ?