OpenGL - renderuj bezpośrednio do bitmapy
Tworzę aplikację, która ma kilka małych okien i kontrolek (więc jest to renderowanie 2D) i chciałbym renderować każde okno i kontrolę na własną bitmapę (nie ma ich zbyt wiele). Oto co mają:
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;
Procedura renderowania:
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);
Ale nie ma wyjścia.
Jeśli używamMainForm.Canvas.Draw(0, 0, BMP);
wtedy pojawi się biały prostokąt.
Chcę robić renderowanie rzeczy na bitmapach, ponieważ mogę zrobić wiele rzeczy z bitmapami (rysuj na nich grafikę, maluj tekst, rozmycie), ale jeśli jest inny sposób renderowania poza ekranem, to jest w porządku ...
Jak więc skonfigurować aplikację do renderowania poza ekranem?