From 4f063dc4dd127c9945b345dff7f316645a2470a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Mon, 10 Apr 2017 22:22:37 +0200 Subject: Object Engine: Ported Force Field object drawing. --- .../gpu_shader_instance_screen_aligned_vert.glsl | 32 ++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 source/blender/gpu/shaders/gpu_shader_instance_screen_aligned_vert.glsl (limited to 'source/blender/gpu/shaders/gpu_shader_instance_screen_aligned_vert.glsl') diff --git a/source/blender/gpu/shaders/gpu_shader_instance_screen_aligned_vert.glsl b/source/blender/gpu/shaders/gpu_shader_instance_screen_aligned_vert.glsl new file mode 100644 index 00000000000..2ee74b3eae0 --- /dev/null +++ b/source/blender/gpu/shaders/gpu_shader_instance_screen_aligned_vert.glsl @@ -0,0 +1,32 @@ + +uniform mat4 ViewProjectionMatrix; +uniform vec3 screen_vecs[2]; + +/* ---- Instanciated Attribs ---- */ +in vec3 pos; /* using Z as axis id */ + +/* ---- Per instance Attribs ---- */ +in mat4 InstanceModelMatrix; +in vec3 color; +in float size; + +flat out vec4 finalColor; + +void main() +{ + vec3 offset = vec3(0.0); + +#ifdef AXIS_NAME + if (pos.z == 0.0) + offset = vec3(1.125, 0.0, 0.0); + else if (pos.z == 1.0) + offset = vec3(0.0, 1.125, 0.0); + else + offset = vec3(0.0, 0.0, 1.125); + offset *= size; +#endif + + vec3 screen_pos = screen_vecs[0].xyz * pos.x + screen_vecs[1].xyz * pos.y; + gl_Position = ViewProjectionMatrix * (InstanceModelMatrix * vec4(offset, 1.0) + vec4(screen_pos * size, 0.0)); + finalColor = vec4(color, 1.0); +} -- cgit v1.2.3