Changing each pixel's position in Vertex shader?

Hello!

I am trying to do a shader that serves as a “lens” on the camera. I want to change the position of each pixel via a function.
Don’t know whether it is achievable in vertex shader written in CG.

The way I connect the shader and the camera is OnRenderImage:

void OnRenderImage(RenderTexture source, RenderTexture destination)
{
Graphics.Blit(source, destination, distortionMaterial);
}

Or only GLSL can achieve it?

You can only change the position of each vertex via a vertex shader.

This sounds like something that would be better off as a post-process image effect. Both CG and GLSL can do it, they’re just different ways of writing shader code.