diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2017-04-10 23:22:37 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2017-04-10 23:23:50 +0300 |
commit | 4f063dc4dd127c9945b345dff7f316645a2470a4 (patch) | |
tree | c06eb5b6bf344ad34291212dd1f2604d7218f9c5 /source/blender/gpu/shaders/gpu_shader_instance_screen_aligned_vert.glsl | |
parent | fb1ecbc2da9fe8ca569fc507275712a7645859fe (diff) |
Object Engine: Ported Force Field object drawing.
Diffstat (limited to 'source/blender/gpu/shaders/gpu_shader_instance_screen_aligned_vert.glsl')
-rw-r--r-- | source/blender/gpu/shaders/gpu_shader_instance_screen_aligned_vert.glsl | 32 |
1 files changed, 32 insertions, 0 deletions
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); +} |