- procedure TOpenGLPersForm.InitBitmap;
 - var
 - Dummy: HPALETTE;
 - begin
 - try
 - OpenglBitmap.width:=printer.pagewidth;
 - OpenglBitmap.height:=printer.pageheight;
 - OpenGLBitmap.Canvas.Lock;
 - BitmapDC := OpenGLBitmap.Canvas.Handle;
 - BitmapRC := CreateRenderingContext(BitmapDC, [opGDI], 24, 0, 0, 0,0, Dummy);
 - ActivateRenderingContext(BitmapDC, BitmapRC);
 - // Tiefenpuffer aktivieren
 - glEnable(GL_DEPTH_TEST);
 - // Nur Fragmente mit niedrigerem Z-Wert (näher an Betrachter) "durchlassen"
 - glDepthFunc(GL_LESS);
 - glViewPort(0,0,OpenGLBitmap.Width,OpenGLBitmap.Height);
 - glMatrixMode(GL_PROJECTION);
 - glLoadIdentity();
 - gluPerspective(45.0, OpenGLBitmap.Width/OpenGLBitmap.Height, Nearclipping, Farclipping);
 - glMatrixMode(GL_MODELVIEW);
 - glLoadIdentity;
 - except
 - Showmessage('InitBitmap fehlgeschlagen!');
 - BitmapRC:=0;
 - if (OpenGLBitmap.Canvas.LockCount > 0) then OpenGLBitmap.Canvas.Unlock;
 - end;
 - end;
 - procedure TOpenGLPersForm.BitBtnDruckClick(Sender: TObject);
 - begin
 - Timer1.enabled:=false;
 - DeactivateRenderingContext;
 - InitBitmap;
 - glEnable(GL_DEPTH_TEST);
 - // Nur Fragmente mit niedrigerem Z-Wert (näher an Betrachter) "durchlassen"
 - glDepthFunc(GL_LESS);
 - //FarbenGL.Hintergrund
 - glClearColor((FarbenGL.Hintergrund and $FF)/255,
 - (FarbenGL.Hintergrund and $FF00 shr 8)/255,
 - (FarbenGL.Hintergrund and $FF0000 shr 16)/255,
 - 0.0);
 - glLoadIdentity;
 - glMatrixMode(GL_PROJECTION);
 - // Identitätsmatrix laden
 - glLoadIdentity;
 - // Viewport an Clientareal des Fensters anpassen
 - glViewPort( 0, 0, OpenGlBitmap.width, OpenGlBitmap.height);
 - // Perspective, FOV und Tiefenreichweite setzen
 - gluPerspective(60, OpenGlBitmap.width/OpenGlBitmap.height, Nearclipping, Farclipping);
 - Rendern;
 - SwapBuffers(DC);
 - Printer.BeginDoc;
 - //Übergabe von Bitmap auf Printer
 - BitBlt(Printer.Canvas.Handle,0,0,Printer.pagewidth,Printer.pageheight,
 - BitmapDC,0,0,SRCCOPY);
 - Printer.EndDoc;
 - DeactivateRenderingContext;
 - DestroyRenderingContext(BitmapRC);
 - ActivateRenderingContext(DC, RC);
 - Timer1.enabled:=true;
 - end;
 
