diff options
Diffstat (limited to 'source/blender/draw/engines/eevee/shaders/eevee_surface_mesh_geom.glsl')
-rw-r--r-- | source/blender/draw/engines/eevee/shaders/eevee_surface_mesh_geom.glsl | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/source/blender/draw/engines/eevee/shaders/eevee_surface_mesh_geom.glsl b/source/blender/draw/engines/eevee/shaders/eevee_surface_mesh_geom.glsl new file mode 100644 index 00000000000..29558a0958e --- /dev/null +++ b/source/blender/draw/engines/eevee/shaders/eevee_surface_mesh_geom.glsl @@ -0,0 +1,33 @@ + +/** + * Optional geometry shader stage to compute barycentric coords + * Only needed / compatible with mesh or gpencil geometry. + * Main is generated in eevee_shader.cc to avoid compilation issue on some drivers. + */ + +layout(triangles) in; +layout(triangle_strip, max_vertices = 3) out; + +vec3 calc_barycentric_distances(vec3 pos0, vec3 pos1, vec3 pos2) +{ + vec3 edge21 = pos2 - pos1; + vec3 edge10 = pos1 - pos0; + vec3 edge02 = pos0 - pos2; + vec3 d21 = normalize(edge21); + vec3 d10 = normalize(edge10); + vec3 d02 = normalize(edge02); + + vec3 dists; + float d = dot(d21, edge02); + dists.x = sqrt(dot(edge02, edge02) - d * d); + d = dot(d02, edge10); + dists.y = sqrt(dot(edge10, edge10) - d * d); + d = dot(d10, edge21); + dists.z = sqrt(dot(edge21, edge21) - d * d); + return dists; +} + +vec2 calc_barycentric_co(int vertid) +{ + return vec2((vertid % 3) == 0, (vertid % 3) == 1); +} |