Eevee: Fix compilation issue on certain driver.

This commit is contained in:
Clément Foucault 2017-05-05 12:10:59 +02:00
parent 8b8792e7b8
commit 31f2f1b5f2
2 changed files with 33 additions and 9 deletions

View File

@ -6,7 +6,10 @@ in vec2 pos;
out vec3 varposition;
out vec3 varnormal;
out vec3 viewPosition;
/* necessary for compilation*/
out vec3 worldPosition;
out vec3 worldNormal;
void main()
{

View File

@ -176,9 +176,12 @@ void color_to_blender_normal_new_shading(vec3 color, out vec3 normal)
normal.y = -2.0 * ((color.g) - 0.5);
normal.z = -2.0 * ((color.b) - 0.5);
}
#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif
#ifndef M_1_PI
#define M_1_PI 0.318309886183790671538
#endif
/*********** SHADER NODES ***************/
@ -2583,6 +2586,24 @@ vec3 rotate_vector(vec3 p, vec3 n, float theta) {
#define NUM_LIGHTS 3
#if __VERSION__ > 120
struct glLight {
vec4 position;
vec4 diffuse;
vec4 specular;
vec4 halfVector;
};
layout(std140) uniform lightSource {
glLight glLightSource[NUM_LIGHTS];
};
#define gl_NormalMatrix NormalMatrix
#else
#define glLightSource gl_LightSource
#endif
/* bsdfs */
void node_bsdf_diffuse(vec4 color, float roughness, vec3 N, out vec4 result)
@ -2592,8 +2613,8 @@ void node_bsdf_diffuse(vec4 color, float roughness, vec3 N, out vec4 result)
/* directional lights */
for (int i = 0; i < NUM_LIGHTS; i++) {
vec3 light_position = gl_LightSource[i].position.xyz;
vec3 light_diffuse = gl_LightSource[i].diffuse.rgb;
vec3 light_position = glLightSource[i].position.xyz;
vec3 light_diffuse = glLightSource[i].diffuse.rgb;
float bsdf = max(dot(N, light_position), 0.0);
L += light_diffuse * bsdf;
@ -2609,10 +2630,10 @@ void node_bsdf_glossy(vec4 color, float roughness, vec3 N, out vec4 result)
/* directional lights */
for (int i = 0; i < NUM_LIGHTS; i++) {
vec3 light_position = gl_LightSource[i].position.xyz;
vec3 H = gl_LightSource[i].halfVector.xyz;
vec3 light_diffuse = gl_LightSource[i].diffuse.rgb;
vec3 light_specular = gl_LightSource[i].specular.rgb;
vec3 light_position = glLightSource[i].position.xyz;
vec3 H = glLightSource[i].halfVector.xyz;
vec3 light_diffuse = glLightSource[i].diffuse.rgb;
vec3 light_specular = glLightSource[i].specular.rgb;
/* we mix in some diffuse so low roughness still shows up */
float bsdf = 0.5 * pow(max(dot(N, H), 0.0), 1.0 / roughness);
@ -2683,12 +2704,12 @@ void node_bsdf_principled(vec4 base_color, float subsurface, vec3 subsurface_rad
/* directional lights */
for (int i = 0; i < NUM_LIGHTS; i++) {
vec3 light_position_world = gl_LightSource[i].position.xyz;
vec3 light_position_world = glLightSource[i].position.xyz;
vec3 light_position = normalize(gl_NormalMatrix * light_position_world);
vec3 H = normalize(light_position + V);
vec3 light_specular = gl_LightSource[i].specular.rgb;
vec3 light_specular = glLightSource[i].specular.rgb;
float NdotL = dot(N, light_position);
float NdotV = dot(N, V);