How do I draw directly (and quickly) into the rendered frame?

Is there an efficient way to modify the frame post-render? I am talking about quite a few pixels set manually. I tried using `OnRenderImage()` to

  • first get the frame into a `Texture2D` with `ReadPixels()`
  • then modify it with `SetPixel()`
  • `Apply()` the changes
  • finally `Graphics.Blit()` it back into the destination texture

However, even setting no pixels kills the framerate. When I try to draw a dozen random rectangles (just to test the speed), the framerate reaches single figures. It seems that `Apply()` is not the only slow thinker here, `SetPixel()` is a significant time waster.

Is there a faster way? And I mean much faster.

Don't use ReadPixels, just render-to-texture straight from the camera and do your compositing in a shader, then splat that texture on a "canvas" billboard.