Drawing the bitmap on the canvas did the trick
bmp.canvas.draw(0,0,bmp);
scale := 2;
// Rendering to a bitmap requires an existing bitmap,
// so we create and size a new one
bmp := TBitmap.Create;
// Don't forget to specify a PixelFormat, or current screen pixel format
// will be used, which may not suit your purposes!
bmp.PixelFormat:=pf32bit;
bmp.Width:=Round(GLSceneViewer1.Width*scale);
bmp.Height:=Round(GLSceneViewer1.Height*scale);
// Here we just request a render
// The second parameter specifies DPI (Dots Per Inch), which is
// linked to the bitmap's scaling
// "96" is the "magic" DPI scale of the screen under windows
GLSceneViewer1.Buffer.RenderToBitmap(bmp, Round(96*scale));
// Draw the bitmap on the canvas of a TPicture
pic := TPicture.Create;
pic.bitmap.width := bmp.width;
pic.bitmap.height := bmp.height;
pic.bitmap.Canvas.Draw(0,0,bmp);
// And save picture to disk
pic.SaveToFile('c:\data\temp\test.png'); // gives black image
bmp.Free;
pic.Free;
Don't ask me why...