Jump to content

  • Log In with Google      Sign In   
  • Create Account


Shader Compile Error Question


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
1 reply to this topic

#1 harshman_chris   Members   -  Reputation: 184

Like
0Likes
Like

Posted 20 January 2013 - 03:18 PM

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

 

 



Sponsor:

#2 harshman_chris   Members   -  Reputation: 184

Like
0Likes
Like

Posted 20 January 2013 - 04:46 PM

Solved it Myself, I don't add the struct to the declaration and defintion.






Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS