diff options
Diffstat (limited to 'source/blender/draw/engines/overlay/shaders/outline_prepass_frag.glsl')
-rw-r--r-- | source/blender/draw/engines/overlay/shaders/outline_prepass_frag.glsl | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/source/blender/draw/engines/overlay/shaders/outline_prepass_frag.glsl b/source/blender/draw/engines/overlay/shaders/outline_prepass_frag.glsl new file mode 100644 index 00000000000..5d6c4881b5b --- /dev/null +++ b/source/blender/draw/engines/overlay/shaders/outline_prepass_frag.glsl @@ -0,0 +1,18 @@ + +/* Should be 2 bits only [0..3]. */ +uniform int outlineId; + +flat in int objectId; + +/* using uint because 16bit uint can contain more ids than int. */ +out uint outId; + +/* Replace top 2 bits (of the 16bit output) by outlineId. + * This leaves 16K different IDs to create outlines between objects. + * SHIFT = (32 - (16 - 2)) */ +#define SHIFT 18u + +void main() +{ + outId = (uint(outlineId) << 14u) | ((uint(objectId) << SHIFT) >> SHIFT); +} |