Here's a bit of code from Ecksdee, which used to just clear the screen and write "Loading...":
(you can see the whole file here
iObjectRegistry* obj_reg = bl->GetApplication ()->GetObjectRegistry ();
csRef<iGraphics3D> g3d = csQueryRegistry<iGraphics3D> (obj_reg);
iGraphics2D* g2d = g3d->GetDriver2D ();
iFontServer* fs = g2d->GetFontServer ();
csRef<iFont> font = fs->LoadFont ("/xd/data/fonts/menu/f500.ttf", 30.0f);
csString text ("Loading...");
int text_width, text_height;
font->GetDimensions (text.GetData (), text_width, text_height);
int width = g2d->GetWidth ();
int height = g2d->GetHeight ();
g2d->ClearAll (g2d->FindRGB (0, 0, 0));
g2d->Write (font, (int)(width/2 - text_width/2),
(int)(height/2 - text_height/2), g2d->FindRGB (255, 255, 255), -1,
For drawing an image (csPixmap), you could look at walktest code (search for cslogo).
Apparently, you're missing some g3d->BeginDraw(CSDRAW_2DGRAPHICS) call (possibly need to use previous draw flags too),
then after you called draw for your pixmap, call g3d->FinishDraw() and g3d->Print(0).
As for iProgressMeter, see for example cslight
source code (in CS/apps/tools/cslight/).
The thing is to pass the progress meter as a parameter to engine->Prepare(myProgressMeter).