lineVertexShader.glsl 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
  2. /*
  3. * This file is part of the LibreOffice project.
  4. *
  5. * This Source Code Form is subject to the terms of the Mozilla Public
  6. * License, v. 2.0. If a copy of the MPL was not distributed with this
  7. * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  8. */
  9. attribute vec2 position;
  10. attribute vec4 extrusion_vectors;
  11. varying float fade_factor; // fade factor for anti-aliasing
  12. uniform float line_width;
  13. uniform float feather; // width where we fade the line
  14. uniform mat4 mvp;
  15. void main()
  16. {
  17. vec2 extrusion_vector = extrusion_vectors.xy;
  18. // miter factor to additionally lengthen the distance of vertex (needed for miter)
  19. // if 1.0 - miter_factor has no effect
  20. float miter_factor = 1.0f / abs(extrusion_vectors.z);
  21. // fade factor is always -1.0 or 1.0 -> we transport that info together with length
  22. fade_factor = sign(extrusion_vectors.z);
  23. float rendered_thickness = (line_width + feather * 2.0) * miter_factor;
  24. // lengthen the vertex in direction of the extrusion vector by line width.
  25. vec4 position = vec4(position + (extrusion_vector * (rendered_thickness / 2.0) ), 0.0, 1.0);
  26. gl_Position = mvp * position;
  27. }
  28. /* vim:set shiftwidth=4 softtabstop=4 expandtab: */