Several features need to be supported in Cycles, workbench and EEVEE.
Most of the relevant code is shared between EEVEE and workbench as part of the draw manager.
Initially at least, NURBS curves can be supported by computing the weights for each evaluated
point on the CPU (see `blender::bke::curves::nurbs::BasisCache`), and just doing interpolation
of attributes on the GPU.
For EEVEE/Viewport, supporting different curve types, segment counts, and cyclic values
could be supported by batching curves with similar data. For example, all curves with segment
counts in between two powers of 2 could be batched together, with padding triangles added
at the final point.
[] EEVEE/Viewport
[] Curve types
[x] Camull Rom
[] Bezier
[] Poly
[] NUIRBS
[] Cyclic
[] Generic attribute rendering
[] Curve domain generic attributes D14916
[] Point domain attributes D14916
[] Curve segment count
[] Remove drawing pass that resamples curves
[] Support drawing arbitrary segment length curves
[] Cycles
[] Curve types
[x] Camull Rom
[] Bezier
[] Poly
[] NURBS
[] Cyclic
[] Generic attribute rendering
[] Curve domain generic attributes
[] Point domain attributes