OpenGL VBO and VAO, generating many points and ellipses


I am the beginner of using Modern OpenGL with shaders. I have a program that have that generates many points on screen like 500x500 or 100x100. That works perfectly with VBO and VAO. Here is the code and a video representation of my program:

void Mesh::SetupSeeds()
	glGenVertexArrays(1, &VAO);
	glGenBuffers(1, &VBO_SEED);
	glBufferData(GL_ARRAY_BUFFER, seeds.size() * 5 * sizeof(float), vertex, GL_STATIC_DRAW);

	// vertex positions
	glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 5* sizeof(float), (void*)0);
	// vertex colors
	glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 5* sizeof(float), (void*)(2 * sizeof(float)));

void Mesh::Draw(Shader shader)
	glUniform1f(seedSizeUniformLocation, seedSize);
	glDrawArrays(GL_POINTS, 0, seeds.size());

And now I need to draw ellipses on that generated “seeds”. How may I do that with not removing generated mesh?


Here is the example of effect i would like to have. I dont ask about what alghorithm i need to have, to generate the red ellipses and rects, but i would like to know how i can draw something on that actual screen with that actual mesh.


Convert the points to rectangles, either client-side or using a geometry shader.

You can use a fragment shader to render a rectangle as an ellipse, e.g.:

if (u*u+v*v>1) discard;

where u and v range from -1 to +1 over the rectangle.

Point sprites could be used, but there’s an implementation-dependent upper limit on the size, and that limit isn’t required to be larger than a single pixel.

Ok, thank you for advise. I will try to work on it :wink: