so I don't have a clue where to start looking in that class.
procedure TDumbUniMesh.Render; gives the rough idea of which (still sub-optimal but much better) approach could be used.
Ideally, there should be a community library for beginners to use instead of the accursed glBegin -- I shall see if I could adapt my DumbUniMesh into a standalone library.


any advice on the question regarding shaders?
It would be hard it what is shown is your current level.
First, you want to pass *two* colors to the shader. This is easily done *but* is, as far as I know, incompatible with the ancient "glColorXX" way of passing the data to the GPU.

So in addition to learning how to create shaders and bind input parameters to them (not that hard, but full of details rarely explained satisfactorily), you still *have* to learn a more modern method of passing parameters to the video card (I may be missing something here -- my knowledge was gained through much trial and error).

I'd give my examples, but my code is heavily diffused into abstraction classes and exception wrappers.

For now, have you tried simply doing it in two passes? One untextured quad for the background, then another glColor() and another, now textured, quad for the character. Yes, it's double overdraw. But it would work.