]> git.tdb.fi Git - libs/gl.git/blobdiff - shaderlib/common.glsl
Add instancing support to standard shaders and RenderMethod
[libs/gl.git] / shaderlib / common.glsl
index 44ef150acc314c746041ba1c74e5338c287e190f..6bac9c3720e478fe3beb5a186da3b53800e902f2 100644 (file)
@@ -10,6 +10,7 @@ layout(set=1) uniform sampler2D normal_map;
 layout(set=0) uniform samplerCube environment_map;
 layout(set=0) uniform samplerCube irradiance_map;
 
+layout(constant_id=auto) const bool use_instancing = false;
 layout(constant_id=auto) const bool use_normal_map = false;
 
 #pragma MSP stage(vertex)
@@ -25,12 +26,18 @@ virtual vec3 get_vertex_normal()
 
 virtual mat4 get_vertex_transform()
 {
-       return world_obj_matrix;
+       if(use_instancing)
+               return transpose(mat4(instance_transform[0], instance_transform[1], instance_transform[2], vec4(0.0, 0.0, 0.0, 1.0)));
+       else
+               return world_obj_matrix;
 }
 
 virtual mat3 get_normal_transform()
 {
-       return world_obj_normal_matrix;
+       if(use_instancing)
+               return transpose(mat3(instance_transform[0].xyz, instance_transform[1].xyz, instance_transform[2].xyz));
+       else
+               return world_obj_normal_matrix;
 }
 
 void standard_transform()