procedure setDCPixelFormat;
var
nPixelFormat: Integer;
pfd: TPixelFormatDescriptor;
begin
FillChar(pfd, SizeOf(pfd), 0);
pfd.dwFlags:= PFD_DRAW_TO_WINDOW or
PFD_SUPPORT_OPENGL or
PFD_DOUBLEBUFFER;
nPixelFormat:= ChoosePixelFormat(dc, @pfd);
SetPixelFormat(dc, nPixelFormat, @pfd);
end;
...
procedure TForm1.FormCreate(Sender: TObject);
begin
dc:= GetDC(Handle);
setDCPixelFormat();
hrc:= wglCreateContext(dc);
wglMakeCurrent(dc, hrc);
end;
Итерационное построение изображения
procedure TForm1.WMPaint(var Msg: TWMPaint);
var
ps: TPaintStruct; i: integer;
begin
BeginPaint(Handle, ps);
// ================================
glClearColor(1, 1, 1, 0);
glclear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity;
glBegin();
glEnd;
SwapBuffers(dc);
// ================================
EndPaint(Handle, ps);
Sleep(5);
InvalidateRect(Handle, nil, False);
end;
Освобождение контекстов рендеринга и вывода
procedure TForm1.FormDestroy(Sender: TObject);
begin
wglDeleteContext(dc);
wglMakeCurrent(0, 0);
wglDeleteContext(hrc);
ReleaseDC(Handle, dc);
DeleteDC(dc);
end;