123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- 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.
|