Thick line tesselation. CPU or GPU?


For a CAD application I want to draw thick lines with rounded end caps.
I’m completely new to openGL, so I’m wondering where I should put my tessellation code. In my backend I store the location of the start point, a direction vector (which also specifies its length) and a thickness for each line. As far as I understand I’ve the following options:

  1. Do full tessellation on the CPU for every line.
  2. Tessellate a unit length line for each thickness I need and use a vertex shader to position (and stretch) the unit line in the openGL world.
  3. Only send the position and direction vectors and thickness to the GPU and do tesselation there using a geometry shader.

I’m not sure whether it’s actually possible to do the last. What would be the best option?

Thanks in advance.

Kind regards,

Remco Poelstra