I would make a data table which holds the color values of each pixel in the screen.

And when drawing new pixels to screen, I would check the old values from this table, and in those cases where the old pixel color is different from the one that I'm going to draw, then I would update both the pixel on the screen and the value in the data table.

Also only those pixel values would need to be checked that are going to be updated this frame. So we wouldn't need to go through the whole data table.

Although of course doing this stuff would consume time...but if lots of pixel drawing and screen clearing every frame could be skipped, then could it be faster? I don't know, just throwing the idea around.

So you are rendering all the pixels anyway but adding a comparison requiring a memory read plus a branch.

If the texturing code was very fast but the c2p code was _extremely_ slow that could be a good choice however here the texturing code is extremely slow and the c2p isn't.