OpenGL - direkt in Bitmap rendern
Ich erstelle eine Anwendung, die eine Reihe kleiner Fenster und Steuerelemente enthält (also 2D-Rendering), und ich möchte jedes Fenster und Steuerelement in einer eigenen Bitmap rendern (es gibt nicht so viele davon). Das ist was haben:
uses dglOpenGL;
...
var BMP: TBitmap;
DC, RC: HDC;
...
function TMainForm.Init: Boolean;
begin
Result := InitOpenGL;
if Result = True then
begin
BMP := TBitmap.Create;
BMP.PixelFormat := pf24bit;
BMP.Width := 1280;
BMP.Height := 1024;
DC := (BMP.Canvas.Handle);
RC := CreateRenderingContext(DC,
[opGDI, opDoubleBuffered],//tried changing, didn't help
24,
24,
0,
0,
0,
0);
ActivateRenderingContext(DC, RC);
glClearColor(0.27, 0.4, 0.7, 0.0);//Light blue
glViewport(0, 0, 1280, 1024);
glMatrixMode(GL_PROJECTION);
glLoadIdentity;
glOrtho(0, 1280, 0, 1024, -1, 10);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity;
end;
end;
Rendervorgang:
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
//Red quad
glColor3f(1, 0, 0);
glBegin(GL_QUADS);
glVertex2f(100, 100);
glVertex2f(1280-100, 100);
glVertex2f(1280-100, 1024-100);
glVertex2f(100, 1024-100);
glend;
//Output
SwapBuffers(DC);
Es erfolgt jedoch keine Ausgabe.
Wenn ich benutzeMainForm.Canvas.Draw(0, 0, BMP);
dann erscheint ein weißes Rechteck.
Ich möchte Bitmaps rendern, weil ich mit Bitmaps eine Menge Dinge machen kann (Grafik darauf zeichnen, Text malen, Unschärfe), aber wenn es eine andere Möglichkeit gibt, Off-Screen-Rendering zu machen, dann ist es okay ...
Wie richte ich meine Anwendung für das Offscreen-Rendering ein?