Jump to content
  • Advertisement
Sign in to follow this  
harshman_chris

Shader Compile Error Question

This topic is 2151 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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;
}   

 

 

Share this post


Link to post
Share on other sites
Advertisement
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!