In theory, you can use a vertex shader to create a degenerate (zero region) primitive. A primitive with a zero region should not lead to rasterization, and thus the fragment will not be displayed. However, this is not particularly intuitive, especially if you use primitives that share vertices.
But no, undoing the top is almost pointless. This is the fundamental unit on which primitives are built. If you just delete one vertex, you will change the rasterized output to undefined ways.
Simply put, vertices are not what create pixels on the screen. This is a vertex relationship that creates primitives that ultimately result in pixels. Geometric shaders work on a primitive-primitive basis, so they are usually where you cancel the rasterization and shading of fragments programmatically.
UPDATE:
It occurred to me that you are using GL_POINTS as your primitive type. In this special case, all you need to do so that your vertex does not go further along the conveyor is installed in a place somewhere outside the viewing volume of your camera. The top will be trimmed and there will be no rasterization or shading of fragments.
This is a much more effective solution for testing certain conditions in the fragment shader, and then discarding, since you skip rasterization and should not run the fragment shader at all. Not to mention the fact that discard usually works as a post-shader execution flag that tells the GPU to refuse the result - the GPU is often forced to execute the entire shader regardless of where you issue the discard instruction in the shader, so discard rarely gives performance advantage, and in many cases it can disable other potentially more useful hardware optimizations. This is the nature of how GPUs plan their shader workload, unfortunately.
The cheapest snippet is the one you never need to process :)
source share