#pragma BLENDER_REQUIRE(common_view_lib.glsl) #pragma BLENDER_REQUIRE(common_hair_lib.glsl) #pragma BLENDER_REQUIRE(surface_lib.glsl) in vec3 pos; in vec3 nor; void main() { GPU_INTEL_VERTEX_SHADER_WORKAROUND #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); #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 }