unit demo01; {$I zglCustomConfig.cfg} interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, {$IFDEF USE_ZENGL_STATIC} zgl_main, zgl_window, zgl_screen, zgl_timers, zgl_primitives_2d, zgl_utils {$ELSE} zglHeader {$ENDIF}; type TForm1 = class(TForm) Panel1: TPanel; procedure FormActivate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Panel1Resize(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; zglInited : Boolean; implementation {$R *.dfm} procedure Init; begin // RU: Вертикальная синхронизация поможет избежать загрузки процессора. // EN: Vertical synchronization will decrease a CPU loading. scr_SetVSync( TRUE ); // RU: Перед стартом необходимо настроить viewport. // EN: Before the start need to configure a viewport. wnd_SetSize( Form1.Panel1.ClientWidth, Form1.Panel1.ClientHeight ); Form1.BringToFront(); end; procedure Draw; begin pr2d_Rect( 10, 10, 800 - 30, 600 - 30, $FF0000, 255 ); // RU: Т.к. ZenGL перехватывает "управление" нужно выполнять обработку интерфейса вручную. // EN: Because ZenGL intercepts "control" you need to call process of GUI manually. Application.ProcessMessages(); end; procedure Timer; begin Form1.Caption := '01 - Initialization [ FPS: ' + u_IntToStr( zgl_Get( RENDER_FPS ) ) + ' ]'; end; procedure UpdateDT( dt : Double ); begin end; procedure TForm1.FormActivate(Sender: TObject); begin if not zglInited Then begin zglInited := TRUE; {$IFNDEF USE_ZENGL_STATIC} zglLoad( libZenGL ); {$ENDIF} zgl_Reg( SYS_LOAD, @Init ); zgl_Reg( SYS_DRAW, @Draw ); // RU: Стоит обратить внимание на название регистрируемой функции, т.к. Update является методом TForm. // EN: Take a look on name of function which will be registered, because Update is a method of TForm. zgl_Reg( SYS_UPDATE, @UpdateDT ); wnd_ShowCursor( TRUE ); zgl_InitToHandle( Panel1.Handle ); Application.Terminate(); end; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin if zglInited Then begin zglInited := FALSE; zgl_Exit(); end; end; procedure TForm1.Panel1Resize(Sender: TObject); begin // RU: Необходимо обновлять viewport как только изменились размеры контрола, куда был инициализирован ZenGL. // EN: Viewport should be updated as soon as size of control was changed. if zglInited Then wnd_SetSize( Panel1.ClientWidth, Panel1.ClientHeight ); end; end.