Рассмотрев основные вопросы функционирования приложения и его взаимодействия с операционной системой, можно перейти к изучению собственно OpenGL. В программе с помощью команд OpenGL окно формы окрашивается в голубоватый цвет:
Пример 1
unit Unit1;
interface
uses
Windows, Messages, Forms, Classes, Controls, ExtCtrls, ComCtrls,
StdCtrls, Dialogs, SysUtils,
OpenGL;
type
TfrmGL = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
hrc: HGLRC; // ссылка на контекст воспроизведения
end;
var
frmGL: TfrmGL;
implementation
{$R *.DFM}
{=======================================================================
Рисование картинки}
procedure TfrmGL.FormPaint(Sender: TObject);
begin
wglMakeCurrent(Canvas.Handle, hrc);
glClearColor (0.5, 0.5, 0.75, 1.0); // цвет фона
glClear (GL_COLOR_BUFFER_BIT); // очистка буфера цвета
wglMakeCurrent (0, 0);
end;
{=======================================================================
Формат пикселя}
procedure SetDCPixelFormat (hdc : HDC);
var
pfd : TPixelFormatDescriptor;
nPixelFormat : Integer;
begin
FillChar (pfd, SizeOf (pfd), 0);
nPixelFormat := ChoosePixelFormat (hdc, @pfd);
SetPixelFormat (hdc, nPixelFormat, @pfd);
end;
{=======================================================================
{Создание формы}
procedure TfrmGL.FormCreate(Sender: TObject);
begin
SetDCPixelFormat(Canvas.Handle);
hrc := wglCreateContext(Canvas.Handle);
end;
{=======================================================================
Конец работы приложения}
procedure TfrmGL.FormDestroy(Sender: TObject);
begin
wglDeleteContext(hrc);
end;
end.
Список uses дополнен модулем OpenGL — это программист должен сделать сам.
Раздел private описания класса формы содержит строку
hrc: HGLRC; // ссылка на контекст воспроизведения
Обработчик события onCreate формы содержит следующие строки:
SetDCPixelFormat(Canvas.Handle); //задаем формат пиксела
hrc := wglCreateContext(Canvas.Handle);//создаем контекст воспроизведения
Первая строка — обращение к описанной в этом же модуле пользовательской процедуре, задающей формат пиксела:
procedure SetDCPixelFormat (hdc : HDC);
var
pfd : TPixelFormatDescriptor;
nPixelFormat : Integer;
begin
FillChar (pfd, SizeOf (pfd), 0);
nPixelFormat := ChoosePixelFormat (hdc, @pfd);
SetPixelFormat (hdc, nPixelFormat, @pfd);
end;