diff options
Diffstat (limited to 'source/blender/draw/engines/eevee/shaders/volumetric_geom.glsl')
-rw-r--r-- | source/blender/draw/engines/eevee/shaders/volumetric_geom.glsl | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/source/blender/draw/engines/eevee/shaders/volumetric_geom.glsl b/source/blender/draw/engines/eevee/shaders/volumetric_geom.glsl new file mode 100644 index 00000000000..208e8165689 --- /dev/null +++ b/source/blender/draw/engines/eevee/shaders/volumetric_geom.glsl @@ -0,0 +1,52 @@ + +#ifdef MESH_SHADER +/* TODO tight slices */ +layout(triangles) in; +layout(triangle_strip, max_vertices=3) out; +#else /* World */ +layout(triangles) in; +layout(triangle_strip, max_vertices=3) out; +#endif + +in vec4 vPos[]; + +flat out int slice; + +#ifdef MESH_SHADER +/* TODO tight slices */ +void main() { + gl_Layer = slice = int(vPos[0].z); + + gl_Position = vPos[0].xyww; + EmitVertex(); + + gl_Position = vPos[1].xyww; + EmitVertex(); + + gl_Position = vPos[2].xyww; + EmitVertex(); + + EndPrimitive(); +} + +#else /* World */ + +/* This is just a pass-through geometry shader that send the geometry + * to the layer corresponding to it's depth. */ + +void main() { + gl_Layer = slice = int(vPos[0].z); + + gl_Position = vPos[0].xyww; + EmitVertex(); + + gl_Position = vPos[1].xyww; + EmitVertex(); + + gl_Position = vPos[2].xyww; + EmitVertex(); + + EndPrimitive(); +} + +#endif |