diff options
Diffstat (limited to 'source/blender/gpu/shaders/gpu_shader_instance_objectspace_variying_color_vert.glsl')
-rw-r--r-- | source/blender/gpu/shaders/gpu_shader_instance_objectspace_variying_color_vert.glsl | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/source/blender/gpu/shaders/gpu_shader_instance_objectspace_variying_color_vert.glsl b/source/blender/gpu/shaders/gpu_shader_instance_objectspace_variying_color_vert.glsl new file mode 100644 index 00000000000..195d4849d99 --- /dev/null +++ b/source/blender/gpu/shaders/gpu_shader_instance_objectspace_variying_color_vert.glsl @@ -0,0 +1,29 @@ + +uniform mat4 ViewMatrix; +uniform mat4 ViewProjectionMatrix; +uniform mat4 ObjectModelMatrix; + +/* ---- Instanciated Attribs ---- */ +in vec3 pos; +in vec3 nor; + +/* ---- Per instance Attribs ---- */ +in mat4 InstanceModelMatrix; +in vec4 color; + +out vec3 normal; +flat out vec4 finalColor; + +void main() +{ + mat4 FinalModelMatrix = ObjectModelMatrix * InstanceModelMatrix; + mat4 ModelViewProjectionMatrix = ViewProjectionMatrix * FinalModelMatrix; + /* This is slow and run per vertex, but it's still faster than + * doing it per instance on CPU and sending it on via instance attrib */ + mat3 NormalMatrix = transpose(inverse(mat3(ViewMatrix * FinalModelMatrix))); + + gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0); + normal = NormalMatrix * nor; + + finalColor = color; +} |