I have my fragment shader here, but when compiling I get an error: ERROR: 0:30: error(#132) Syntax error: '_light' parse error
It is most likely something silly I just need a second set of eyes is my guess.
#version 330 core
struct Attenuation
{
int constant;
int linear;
int exponential;
};
struct BaseLight
{
vec4 colour;
float ambientIntensity;
float diffuseIntensity;
};
struct DirectionalLight
{
BaseLight base;
vec3 direction;
};
struct PointLight
{
BaseLight base;
vec3 position;
Attenuation attenuation;
};
//Line 30 below
vec3 CalcLightInternal(struct BaseLight _light, vec3 _lightDirection, vec3 _normal);
vec3 CalcDirectionalLight(vec3 _normal);
vec3 CalcPointLight(int _index, vec3 _normal);
const int MAX_POINT_LIGHTS = 5;
in vec2 uv0;
in vec3 normal0;
in vec3 worldPos0;
out vec3 finalColor;
uniform DirectionalLight directionalLight;
uniform PointLight pointLights[MAX_POINT_LIGHTS];
uniform int numPointLights;
uniform int lightingEnabled;
uniform vec3 cameraEyeWorldPosition;
uniform float specularIntensity;
uniform float specularPower;
uniform sampler2D diffusetexture;
void main()
{
vec3 MaterialDiffuseColor = texture2D(diffusetexture, uv0).rgb;
vec3 Normal = normalize(normal0);
if(lightingEnabled == 1)
{
vec3 TotalLight = CalcDirectionalLight(Normal);
for (int i = 0; i < numPointLights; i++)
{
TotalLight += CalcPointLight(i, Normal);
}
finalColor = MaterialDiffuseColor * TotalLight;
}
else
{
finalColor = MaterialDiffuseColor;
}
}
vec3 CalcLightInternal(struct BaseLight _light, vec3 _lightDirection, vec3 _normal)
{
vec3 AmbientColor = _light.colour * _light.ambientIntensity;
float DiffuseFactor = dot(normalize(_normal), _lightDirection);
vec3 DiffuseColor = vec3(0, 0, 0);
vec3 SpecularColor = vec3(0, 0, 0);
if (DiffuseFactor > 0)
{
DiffuseColor = _light.colour * _light.diffuseIntensity * DiffuseFactor;
vec3 VertexToEye = normalize(cameraEyeWorldPosition - worldPos0);
vec3 LightReflect = normalize(reflect(_lightDirection, Normal));
float SpecularFactor = dot(VertexToEye, LightReflect);
SpecularFactor = pow(SpecularFactor, specularPower);
if (SpecularFactor > 0)
{
SpecularColor = _light.colour * specularIntensity * SpecularFactor;
}
}
return (AmbientColor + DiffuseColor + SpecularColor);
}
vec3 CalcDirectionalLight(vec3 _normal)
{
return CalcLightInternal(directionalLight.base, directionalLight.direction, _normal);
}
vec3 CalcPointLight(int _index, vec3 _normal)
{
vec3 LightDirection = WorldPos0 - pointLights[_index].position;
float Distance = length(LightDirection);
LightDirection = normalize(LightDirection);
vec4 Color = CalcLightInternal(pointLights[Index].base, LightDirection, _normal);
float Attenuation = pointLights[_index].attenuation.constant +
pointLights[_index].attenuation.linear * Distance +
pointLights[_index].attenuation.exponential * Distance * Distance;
return Color / Attenuation;
}






