From f4b76b1fdd20b87637b51324e4f5feba04a2eb74 Mon Sep 17 00:00:00 2001
From: Mathias Paulin <mathias.paulin@irit.fr>
Date: Mon, 12 Apr 2021 08:02:58 +0200
Subject: [PATCH] Fix glsl link error due to in/out explicit location

---
 .../EmissivityPass/emissivitypass.vert.glsl   | 21 +++++++++++++++++++
 .../EnvLightPass/envlightpass.vert.glsl       |  3 +++
 .../LocalLightPass/lightpass.vert.glsl        |  3 +++
 .../TransparencyPass/oitpass.vert.glsl        |  3 +++
 .../Shaders/ZPrepass/zprepass.vert.glsl       |  4 +++-
 5 files changed, 33 insertions(+), 1 deletion(-)

diff --git a/src/libRender/RadiumNBR/Shaders/EmissivityPass/emissivitypass.vert.glsl b/src/libRender/RadiumNBR/Shaders/EmissivityPass/emissivitypass.vert.glsl
index 4e3af29..fde2a9a 100644
--- a/src/libRender/RadiumNBR/Shaders/EmissivityPass/emissivitypass.vert.glsl
+++ b/src/libRender/RadiumNBR/Shaders/EmissivityPass/emissivitypass.vert.glsl
@@ -1,16 +1,37 @@
 #include "TransformStructs.glsl"
 
 layout (location = 0) in vec3 in_position;
+layout (location = 1) in vec3 in_normal;
+layout (location = 2) in vec3 in_tangent;
+layout (location = 3) in vec3 in_bitangent;
 layout (location = 4) in vec3 in_texcoord;
+layout (location = 5) in vec4 in_color;
 
 uniform Transform transform;
 
+layout (location = 0) out vec3 out_position;
+layout (location = 1) out vec3 out_normal;
 layout (location = 2) out vec3 out_texcoord;
+layout (location = 3) out vec3 out_vertexcolor;
+layout (location = 4) out vec3 out_tangent;
 
 
 void main()
 {
     mat4 mvp = transform.proj * transform.view * transform.model;
     gl_Position = mvp * vec4(in_position, 1.0);
+
+    vec4 pos = transform.model * vec4(in_position, 1.0);
+    pos /= pos.w;
+
+    vec3 normal = mat3(transform.worldNormal) * in_normal;
+    vec3 tangent = mat3(transform.model) * in_tangent;
+
+    vec3 eye = -transform.view[3].xyz * mat3(transform.view);
+
+    out_position    = vec3(pos);
     out_texcoord    = in_texcoord;
+    out_normal      = normal;
+    out_tangent     = tangent;
+    out_vertexcolor = in_color.rgb;
 }
diff --git a/src/libRender/RadiumNBR/Shaders/EnvLightPass/envlightpass.vert.glsl b/src/libRender/RadiumNBR/Shaders/EnvLightPass/envlightpass.vert.glsl
index 07e1398..7047d6b 100644
--- a/src/libRender/RadiumNBR/Shaders/EnvLightPass/envlightpass.vert.glsl
+++ b/src/libRender/RadiumNBR/Shaders/EnvLightPass/envlightpass.vert.glsl
@@ -5,12 +5,14 @@ layout (location = 1) in vec3 in_normal;
 layout (location = 2) in vec3 in_tangent;
 layout (location = 3) in vec3 in_bitangent;
 layout (location = 4) in vec3 in_texcoord;
+layout (location = 5) in vec4 in_color;
 
 uniform Transform transform;
 
 layout (location = 0) out vec3 out_position;// Position in World Space
 layout (location = 1) out vec3 out_normal;
 layout (location = 2) out vec3 out_texcoord;// Used in case of normal mapping
+layout (location = 3) out vec3 out_vertexcolor;
 layout (location = 4) out vec3 out_tangent;
 layout (location = 5) out vec3 out_viewVector;
 
@@ -32,4 +34,5 @@ void main()
     out_normal      = normal;
     out_tangent     = tangent;
     out_viewVector  = vec3(eye - out_position);
+    out_vertexcolor = in_color.rgb;
 }
diff --git a/src/libRender/RadiumNBR/Shaders/LocalLightPass/lightpass.vert.glsl b/src/libRender/RadiumNBR/Shaders/LocalLightPass/lightpass.vert.glsl
index 907b721..ff94e0f 100644
--- a/src/libRender/RadiumNBR/Shaders/LocalLightPass/lightpass.vert.glsl
+++ b/src/libRender/RadiumNBR/Shaders/LocalLightPass/lightpass.vert.glsl
@@ -6,12 +6,14 @@ layout (location = 1) in vec3 in_normal;
 layout (location = 2) in vec3 in_tangent;
 layout (location = 3) in vec3 in_bitangent;
 layout (location = 4) in vec3 in_texcoord;
+layout (location = 5) in vec4 in_color;
 
 uniform Transform transform;
 
 layout (location = 0) out vec3 out_position;// Position in World Space
 layout (location = 1) out vec3 out_normal;
 layout (location = 2) out vec3 out_texcoord;// Used in case of normal mapping
+layout (location = 3) out vec3 out_vertexcolor;
 layout (location = 4) out vec3 out_tangent;
 layout (location = 5) out vec3 out_viewVector;
 layout (location = 6) out vec3 out_lightVector;
@@ -36,4 +38,5 @@ void main()
     out_tangent     = tangent;
     out_viewVector  = vec3(eye - out_position);
     out_lightVector = getLightDirection(light, out_position);
+    out_vertexcolor = in_color.rgb;
 }
diff --git a/src/libRender/RadiumNBR/Shaders/TransparencyPass/oitpass.vert.glsl b/src/libRender/RadiumNBR/Shaders/TransparencyPass/oitpass.vert.glsl
index 907b721..ff94e0f 100644
--- a/src/libRender/RadiumNBR/Shaders/TransparencyPass/oitpass.vert.glsl
+++ b/src/libRender/RadiumNBR/Shaders/TransparencyPass/oitpass.vert.glsl
@@ -6,12 +6,14 @@ layout (location = 1) in vec3 in_normal;
 layout (location = 2) in vec3 in_tangent;
 layout (location = 3) in vec3 in_bitangent;
 layout (location = 4) in vec3 in_texcoord;
+layout (location = 5) in vec4 in_color;
 
 uniform Transform transform;
 
 layout (location = 0) out vec3 out_position;// Position in World Space
 layout (location = 1) out vec3 out_normal;
 layout (location = 2) out vec3 out_texcoord;// Used in case of normal mapping
+layout (location = 3) out vec3 out_vertexcolor;
 layout (location = 4) out vec3 out_tangent;
 layout (location = 5) out vec3 out_viewVector;
 layout (location = 6) out vec3 out_lightVector;
@@ -36,4 +38,5 @@ void main()
     out_tangent     = tangent;
     out_viewVector  = vec3(eye - out_position);
     out_lightVector = getLightDirection(light, out_position);
+    out_vertexcolor = in_color.rgb;
 }
diff --git a/src/libRender/RadiumNBR/Shaders/ZPrepass/zprepass.vert.glsl b/src/libRender/RadiumNBR/Shaders/ZPrepass/zprepass.vert.glsl
index 938179c..fde2a9a 100644
--- a/src/libRender/RadiumNBR/Shaders/ZPrepass/zprepass.vert.glsl
+++ b/src/libRender/RadiumNBR/Shaders/ZPrepass/zprepass.vert.glsl
@@ -5,12 +5,14 @@ layout (location = 1) in vec3 in_normal;
 layout (location = 2) in vec3 in_tangent;
 layout (location = 3) in vec3 in_bitangent;
 layout (location = 4) in vec3 in_texcoord;
+layout (location = 5) in vec4 in_color;
 
 uniform Transform transform;
 
 layout (location = 0) out vec3 out_position;
 layout (location = 1) out vec3 out_normal;
 layout (location = 2) out vec3 out_texcoord;
+layout (location = 3) out vec3 out_vertexcolor;
 layout (location = 4) out vec3 out_tangent;
 
 
@@ -31,5 +33,5 @@ void main()
     out_texcoord    = in_texcoord;
     out_normal      = normal;
     out_tangent     = tangent;
-
+    out_vertexcolor = in_color.rgb;
 }
-- 
GitLab