mesh.frag.ts 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. /**
  2. * Copyright (c) 2018-2021 mol* contributors, licensed under MIT, See LICENSE file for more info.
  3. *
  4. * @author Alexander Rose <alexander.rose@weirdbyte.de>
  5. */
  6. export const mesh_frag = `
  7. precision highp float;
  8. precision highp int;
  9. #include common
  10. #include common_frag_params
  11. #include color_frag_params
  12. #include light_frag_params
  13. #include normal_frag_params
  14. #include common_clip
  15. void main() {
  16. #include clip_pixel
  17. // Workaround for buggy gl_FrontFacing (e.g. on some integrated Intel GPUs)
  18. vec3 fdx = dFdx(vViewPosition);
  19. vec3 fdy = dFdy(vViewPosition);
  20. vec3 faceNormal = normalize(cross(fdx,fdy));
  21. bool frontFacing = dot(vNormal, faceNormal) > 0.0;
  22. #if defined(dFlipSided)
  23. interior = frontFacing;
  24. #else
  25. interior = !frontFacing;
  26. #endif
  27. float fragmentDepth = gl_FragCoord.z;
  28. #include assign_material_color
  29. #if defined(dRenderVariant_pick)
  30. #include check_picking_alpha
  31. gl_FragColor = material;
  32. #elif defined(dRenderVariant_depth)
  33. gl_FragColor = material;
  34. #elif defined(dRenderVariant_marking)
  35. gl_FragColor = material;
  36. #elif defined(dRenderVariant_color)
  37. #ifdef dIgnoreLight
  38. gl_FragColor = material;
  39. #else
  40. #if defined(dFlatShaded)
  41. vec3 normal = -faceNormal;
  42. #else
  43. vec3 normal = -normalize(vNormal);
  44. #ifdef dDoubleSided
  45. normal = normal * (float(frontFacing) * 2.0 - 1.0);
  46. #endif
  47. #endif
  48. #include apply_light_color
  49. #endif
  50. #include apply_interior_color
  51. #include apply_marker_color
  52. #include apply_fog
  53. #include wboit_write
  54. #endif
  55. }
  56. `;