mesh.frag.ts 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. /**
  2. * Copyright (c) 2018-2022 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. #define bumpEnabled
  10. #include common
  11. #include common_frag_params
  12. #include color_frag_params
  13. #include light_frag_params
  14. #include normal_frag_params
  15. #include common_clip
  16. void main() {
  17. #include clip_pixel
  18. // Workaround for buggy gl_FrontFacing (e.g. on some integrated Intel GPUs)
  19. vec3 fdx = dFdx(vViewPosition);
  20. vec3 fdy = dFdy(vViewPosition);
  21. vec3 faceNormal = normalize(cross(fdx,fdy));
  22. bool frontFacing = dot(vNormal, faceNormal) > 0.0;
  23. #if defined(dFlipSided)
  24. interior = frontFacing;
  25. #else
  26. interior = !frontFacing;
  27. #endif
  28. float fragmentDepth = gl_FragCoord.z;
  29. #include assign_material_color
  30. #if defined(dRenderVariant_pick)
  31. #include check_picking_alpha
  32. #ifdef requiredDrawBuffers
  33. gl_FragColor = vObject;
  34. gl_FragData[1] = vInstance;
  35. gl_FragData[2] = vGroup;
  36. gl_FragData[3] = packDepthToRGBA(fragmentDepth);
  37. #else
  38. gl_FragColor = vColor;
  39. #endif
  40. #elif defined(dRenderVariant_depth)
  41. gl_FragColor = material;
  42. #elif defined(dRenderVariant_marking)
  43. gl_FragColor = material;
  44. #elif defined(dRenderVariant_color)
  45. #if defined(dFlatShaded)
  46. vec3 normal = -faceNormal;
  47. #else
  48. vec3 normal = -normalize(vNormal);
  49. if (uDoubleSided) normal *= float(frontFacing) * 2.0 - 1.0;
  50. #endif
  51. #include apply_light_color
  52. #include apply_interior_color
  53. #include apply_marker_color
  54. #include apply_fog
  55. #include wboit_write
  56. #endif
  57. }
  58. `;