value in this case would come from the vertex shader so you'd define vertex colors in your vertex buffer, set up the attribs, and then set this value in the vertex shader
that would work sure just remember this only works if you do separate draw calls, uniforms have the same value throughout the draw call this is why i'd advise using vertex colors, it allows you to change them even while still using one draw call
my sprite renderer passes through a bunch of vertex parameters, including stuff like rotation information. because of this I can draw up to 16384 sprites in a single draw call
circles are a lot harder. you either have to draw lots of small triangles, draw a circle texture, or do what I do which is to use an SDF which is a whole nother thing entirely
could i make a program that basically creates an empty array and then goes along bit by bit by the circumference of the circle until it makes a full circle and comes back to the start