GPU: Remove ModelViewMatrix and ModelViewMatrixInverse usage
authorClément Foucault <foucault.clem@gmail.com>
Sat, 11 May 2019 11:59:10 +0000 (13:59 +0200)
committerClément Foucault <foucault.clem@gmail.com>
Tue, 14 May 2019 08:57:03 +0000 (10:57 +0200)
source/blender/gpu/intern/gpu_codegen.c
source/blender/gpu/shaders/gpu_shader_instance_edges_variying_color_vert.glsl
source/blender/gpu/shaders/gpu_shader_material.glsl

index 6259780c26181a251a90ca53a731e135ad6b65d7..b909839473f1d71cadcbd97169666e2b9a5b144e 100644 (file)
@@ -883,10 +883,11 @@ static char *code_generate_fragment(GPUMaterial *material,
     BLI_dynstr_append(ds, "\t#define viewinv ViewMatrixInverse\n");
   }
   if (builtins & GPU_LOC_TO_VIEW_MATRIX) {
-    BLI_dynstr_append(ds, "\t#define localtoviewmat ModelViewMatrix\n");
+    BLI_dynstr_append(ds, "\t#define localtoviewmat (ViewMatrix * ModelMatrix)\n");
   }
   if (builtins & GPU_INVERSE_LOC_TO_VIEW_MATRIX) {
-    BLI_dynstr_append(ds, "\t#define invlocaltoviewmat ModelViewMatrixInverse\n");
+    BLI_dynstr_append(ds,
+                      "\t#define invlocaltoviewmat (ModelMatrixInverse * ViewMatrixInverse)\n");
   }
   if (builtins & GPU_VIEW_NORMAL) {
     BLI_dynstr_append(ds, "#ifdef HAIR_SHADER\n");
index b4a6b0de33fdc136389ef57148d4cd842724c495..62a526cae4904734eb46837506b9b028da9d9b31 100644 (file)
@@ -35,12 +35,12 @@ void main()
 {
   vec3 eye;
 
-  mat4 ModelViewMatrix = ViewMatrix * InstanceModelMatrix;
+  mat4 model_view_matrix = ViewMatrix * InstanceModelMatrix;
 
   vec4 pos_4d = vec4(pos, 1.0);
-  MV_pos = ModelViewMatrix * pos_4d;
+  MV_pos = model_view_matrix * pos_4d;
 
-  mat3 normal_matrix = transpose(inverse(mat3(ModelViewMatrix)));
+  mat3 normal_matrix = transpose(inverse(mat3(model_view_matrix)));
 
   /* if persp */
   if (ProjectionMatrix[3][3] == 0.0) {
index 768f5ddb057852659d4dd8ae5a46cd097e9b3166..03999b2277cef39f14e81f42f34a4993e62d68fc 100644 (file)
@@ -1,7 +1,4 @@
 
-uniform mat4 ModelViewMatrix;
-uniform mat4 ModelViewMatrixInverse;
-
 #ifndef USE_ATTR
 uniform mat4 ModelMatrix;
 uniform mat4 ModelMatrixInverse;
@@ -1734,11 +1731,11 @@ void node_tex_environment_texco(vec3 viewvec, out vec3 worldvec)
   vec4 v = (ProjectionMatrix[3][3] == 0.0) ? vec4(viewvec, 1.0) : vec4(0.0, 0.0, 1.0, 1.0);
   vec4 co_homogenous = (ProjectionMatrixInverse * v);
 
-  vec4 co = vec4(co_homogenous.xyz / co_homogenous.w, 0.0);
+  vec3 co = co_homogenous.xyz / co_homogenous.w;
 #  if defined(WORLD_BACKGROUND) || defined(PROBE_CAPTURE)
-  worldvec = (ViewMatrixInverse * co).xyz;
+  worldvec = mat3(ViewMatrixInverse) * co;
 #  else
-  worldvec = (ModelViewMatrixInverse * co).xyz;
+  worldvec = mat3(ModelMatrixInverse) * (mat3(ViewMatrixInverse) * co);
 #  endif
 #endif
 }