demo01.pas 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. unit demo01;
  2. {$I zglCustomConfig.cfg}
  3. interface
  4. uses
  5. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  6. Dialogs, ExtCtrls,
  7. {$IFDEF USE_ZENGL_STATIC}
  8. zgl_main,
  9. zgl_window,
  10. zgl_screen,
  11. zgl_timers,
  12. zgl_primitives_2d,
  13. zgl_utils
  14. {$ELSE}
  15. zglHeader
  16. {$ENDIF};
  17. type
  18. TForm1 = class(TForm)
  19. Panel1: TPanel;
  20. procedure FormActivate(Sender: TObject);
  21. procedure FormClose(Sender: TObject; var Action: TCloseAction);
  22. procedure Panel1Resize(Sender: TObject);
  23. private
  24. { Private declarations }
  25. public
  26. { Public declarations }
  27. end;
  28. var
  29. Form1: TForm1;
  30. zglInited : Boolean;
  31. implementation
  32. {$R *.dfm}
  33. procedure Init;
  34. begin
  35. // RU: Âåðòèêàëüíàÿ ñèíõðîíèçàöèÿ ïîìîæåò èçáåæàòü çàãðóçêè ïðîöåññîðà.
  36. // EN: Vertical synchronization will decrease a CPU loading.
  37. scr_SetVSync( TRUE );
  38. // RU: Ïåðåä ñòàðòîì íåîáõîäèìî íàñòðîèòü viewport.
  39. // EN: Before the start need to configure a viewport.
  40. wnd_SetSize( Form1.Panel1.ClientWidth, Form1.Panel1.ClientHeight );
  41. Form1.BringToFront();
  42. end;
  43. procedure Draw;
  44. begin
  45. pr2d_Rect( 10, 10, 800 - 30, 600 - 30, $FF0000, 255 );
  46. // RU: Ò.ê. ZenGL ïåðåõâàòûâàåò "óïðàâëåíèå" íóæíî âûïîëíÿòü îáðàáîòêó èíòåðôåéñà âðó÷íóþ.
  47. // EN: Because ZenGL intercepts "control" you need to call process of GUI manually.
  48. Application.ProcessMessages();
  49. end;
  50. procedure Timer;
  51. begin
  52. Form1.Caption := '01 - Initialization [ FPS: ' + u_IntToStr( zgl_Get( RENDER_FPS ) ) + ' ]';
  53. end;
  54. procedure UpdateDT( dt : Double );
  55. begin
  56. end;
  57. procedure TForm1.FormActivate(Sender: TObject);
  58. begin
  59. if not zglInited Then
  60. begin
  61. zglInited := TRUE;
  62. {$IFNDEF USE_ZENGL_STATIC}
  63. zglLoad( libZenGL );
  64. {$ENDIF}
  65. zgl_Reg( SYS_LOAD, @Init );
  66. zgl_Reg( SYS_DRAW, @Draw );
  67. // RU: Ñòîèò îáðàòèòü âíèìàíèå íà íàçâàíèå ðåãèñòðèðóåìîé ôóíêöèè, ò.ê. Update ÿâëÿåòñÿ ìåòîäîì TForm.
  68. // EN: Take a look on name of function which will be registered, because Update is a method of TForm.
  69. zgl_Reg( SYS_UPDATE, @UpdateDT );
  70. wnd_ShowCursor( TRUE );
  71. zgl_InitToHandle( Panel1.Handle );
  72. Application.Terminate();
  73. end;
  74. end;
  75. procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
  76. begin
  77. if zglInited Then
  78. begin
  79. zglInited := FALSE;
  80. zgl_Exit();
  81. end;
  82. end;
  83. procedure TForm1.Panel1Resize(Sender: TObject);
  84. begin
  85. // RU: Íåîáõîäèìî îáíîâëÿòü viewport êàê òîëüêî èçìåíèëèñü ðàçìåðû êîíòðîëà, êóäà áûë èíèöèàëèçèðîâàí ZenGL.
  86. // EN: Viewport should be updated as soon as size of control was changed.
  87. if zglInited Then
  88. wnd_SetSize( Panel1.ClientWidth, Panel1.ClientHeight );
  89. end;
  90. end.