diff options
Diffstat (limited to 'source/blender/draw/engines/eevee/shaders/surface_vert.glsl')
-rw-r--r-- | source/blender/draw/engines/eevee/shaders/surface_vert.glsl | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/source/blender/draw/engines/eevee/shaders/surface_vert.glsl b/source/blender/draw/engines/eevee/shaders/surface_vert.glsl new file mode 100644 index 00000000000..0ad1393dd70 --- /dev/null +++ b/source/blender/draw/engines/eevee/shaders/surface_vert.glsl @@ -0,0 +1,60 @@ + +#pragma BLENDER_REQUIRE(common_hair_lib.glsl) +#pragma BLENDER_REQUIRE(common_view_lib.glsl) +#pragma BLENDER_REQUIRE(surface_lib.glsl) + +#ifndef HAIR_SHADER +in vec3 pos; +in vec3 nor; +#endif + +RESOURCE_ID_VARYING + +void main() +{ + GPU_INTEL_VERTEX_SHADER_WORKAROUND + + PASS_RESOURCE_ID + +#ifdef HAIR_SHADER + hairStrandID = hair_get_strand_id(); + vec3 pos, binor; + hair_get_pos_tan_binor_time((ProjectionMatrix[3][3] == 0.0), + ModelMatrixInverse, + ViewMatrixInverse[3].xyz, + ViewMatrixInverse[2].xyz, + pos, + hairTangent, + binor, + hairTime, + hairThickness, + hairThickTime); + worldNormal = cross(hairTangent, binor); + vec3 world_pos = pos; +#else + vec3 world_pos = point_object_to_world(pos); +#endif + + gl_Position = point_world_to_ndc(world_pos); + + /* Used for planar reflections */ + gl_ClipDistance[0] = dot(vec4(world_pos, 1.0), clipPlanes[0]); + +#ifdef MESH_SHADER + worldPosition = world_pos; + viewPosition = point_world_to_view(worldPosition); + +# ifndef HAIR_SHADER + worldNormal = normalize(normal_object_to_world(nor)); +# endif + + /* No need to normalize since this is just a rotation. */ + viewNormal = normal_world_to_view(worldNormal); +# ifdef USE_ATTR +# ifdef HAIR_SHADER + pos = hair_get_strand_pos(); +# endif + pass_attr(pos, NormalMatrix, ModelMatrixInverse); +# endif +#endif +} |