changed: gcc8 base update
[opensg.git] / Examples / CSM / Shader / Lights / lights.vp
blob5bad739d08611aa86bee0538cb89f2339c998392
2 uniform bool OSGLight0Active;
3 uniform bool OSGLight1Active;
4 uniform bool OSGLight2Active;
6 vec4 Ambient;
7 vec4 Diffuse;
8 vec4 Specular;
10 void pointLight(in int i, 
11                 in vec3 normal, 
12                 in vec3 eye, 
13                 in vec3 ecPosition3)
15     float nDotVP; 
16     float nDotHV; 
17     float pf;     
18     float attenuation;
19     float d;          
20     vec3  VP;
21     vec3  halfVector; 
22                                   
23     VP = vec3(gl_LightSource[i].position) - 
24         ecPosition3;
25     // Compute distance between surface and light position
26     d = length(VP);
28     // Normalize the vector from surface to light position
29     VP = normalize(VP);
31     // Compute attenuation
32     attenuation = 1.0 / (gl_LightSource[i].constantAttenuation +
33                          gl_LightSource[i].linearAttenuation * d +
34                          gl_LightSource[i].quadraticAttenuation * d * d);
35     halfVector = normalize(VP + eye);
36     nDotVP = max(0.0, dot(normal, VP));
37     nDotHV = max(0.0, dot(normal, halfVector));
39     if (nDotVP == 0.0)
40         pf = 0.0;
41     else
42         pf = pow(nDotHV, gl_FrontMaterial.shininess);
44     Ambient  += gl_LightSource[i].ambient * attenuation;
45     Diffuse  += gl_LightSource[i].diffuse * nDotVP * attenuation;
46     Specular += gl_LightSource[i].specular * pf * attenuation;
49 vec3 fnormal(void)
51     //Compute the normal
52     vec3 normal = gl_NormalMatrix * gl_Normal;
53     normal = normalize(normal);
54     return normal;
57 void flight(in vec3 normal, in vec4 ecPosition, float alphaFade)
59     vec4 color;
60     vec3 ecPosition3;
61     vec3 eye;
63     ecPosition3 = (vec3 (ecPosition)) / ecPosition.w;
64     eye = vec3 (0.0, 0.0, 1.0);
66     // Clear the light intensity accumulators
67     Ambient  = vec4 (0.0);
68     Diffuse  = vec4 (0.0);
69     Specular = vec4 (0.0);
71     if(OSGLight0Active)
72         pointLight(0, normal, eye, ecPosition3);
74     if(OSGLight1Active)
75         pointLight(1, normal, eye, ecPosition3);
77     if(OSGLight2Active)
78         pointLight(2, normal, eye, ecPosition3);
80     color = gl_FrontLightModelProduct.sceneColor +
81         Ambient  * gl_FrontMaterial.ambient +
82         Diffuse  * gl_FrontMaterial.diffuse;
83     color += Specular * gl_FrontMaterial.specular;
84     color = clamp( color, 0.0, 1.0 );
85     gl_FrontColor = color;
86     gl_FrontColor.a *= alphaFade;
90 void main(void)
92     vec3  transformedNormal;
93     float alphaFade = 1.0;
95     // Eye-coordinate position of vertex, needed in various calculations
96     vec4 ecPosition = gl_ModelViewMatrix * gl_Vertex;
98     // Do fixed functionality vertex transform
99     gl_Position = ftransform();
100     transformedNormal = fnormal();
101     flight(transformedNormal, ecPosition, alphaFade);