Подготовка контекста вывода и рендеринга

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;


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: