I'm a little hesitant to mention it (since it is barely documented and you'll be on your own getting it to work), but another way to go for vector art is to use NanoVG. It's kind of like a real time version of SVG using OpenGL.
Here's a pic of your data (the points vector) rendered using this code (in an SFML project):
nvgBeginFrame(vg, 1920, 1080, 1);
nvgBeginPath(vg);
nvgFillColor(vg, nvgRGBA(255, 0, 0, 255));
nvgStrokeColor(vg, nvgRGBA(255, 255, 0, 255));
nvgStrokeWidth(vg, 2);
nvgTranslate(vg, 100,100);
nvgBeginPath(vg);
nvgMoveTo(vg, points[0].x, points[0].y);
for (int i=1; i<points.size(); ++i)
{
nvgLineTo(vg, points[i].x, points[i].y);
}
nvgClosePath(vg);
nvgFill(vg);
nvgStroke(vg);
nvgEndFrame(vg);
It works within SFML fine, but you have to be a little careful. To get concave shapes it needs a stencil buffer, so you need to set the SFML window context to 8 bit stencil. You also need to call resetGLStates() on the SFML window after any NanoVG rendering, because NanoVG messes with opengl states that SFML expects to not be changed.
Performance won't be as good (since its more dynamic remaking the shape every frame, not just a vertex array generated once), but there's a lot of features in it.
https://github.com/memononen/nanovg