demo01.dpr 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. program demo01;
  2. // RU: Ýòîò ôàéë ñîäåðæèò íåêîòîðûå íàñòðîéêè(íàïðèìåð èñïîëüçîâàòü ëè ñòàòè÷åñêóþ êîìïèëÿöèþ) è îïðåäåëåíèÿ ÎÑ ïîä êîòîðóþ ïðîèñõîäèò êîìïèëÿöèÿ.
  3. // EN: This file contains some options(e.g. whether to use static compilation) and defines of OS for which is compilation going.
  4. {$I zglCustomConfig.cfg}
  5. {$I zgl_config.cfg}
  6. {$R *.res}
  7. uses
  8. // RU: Ïðè èñïîëüçîâàíèè ñòàòè÷åñêîé êîìïèëÿöèè íåîáõîäèìî ïîäêëþ÷àòü ìîäóëè ZenGL ñîäåðæàùèå íåîáõîäèìûé ôóíêöèîíàë.
  9. // EN: Using static compilation needs to use ZenGL units with needed functionality.
  10. zgl_screen,
  11. zgl_window,
  12. zgl_timers,
  13. zgl_utils,
  14. zgl_types,
  15. zgl_application
  16. ;
  17. var
  18. DirApp : UTF8String;
  19. DirHome : UTF8String;
  20. TimeStart: Byte;
  21. procedure Init;
  22. begin
  23. // RU: Òóò ìîæíî âûïîëíÿòü çàãðóçêó îñíîâíûõ ðåñóðñîâ.
  24. // EN: Here can be loading of main resources.
  25. end;
  26. procedure Draw;
  27. begin
  28. // RU: Òóò "ðèñóåì" ÷òî óãîäíî :)
  29. // EN: Here "draw" anything :)
  30. end;
  31. procedure Update( dt : Double );
  32. begin
  33. // RU: Ýòà ôóíêöèÿ íàçåìåíèìà äëÿ ðåàëèçàöèÿ ïëàâíîãî äâèæåíèÿ ÷åãî-ëèáî, ò.ê. òî÷íîñòü òàéìåðîâ îãðàíè÷åíà FPS.
  34. // EN: This function is the best way to implement smooth moving of something, because accuracy of timers are restricted by FPS.
  35. end;
  36. // RU: Ïðèìåð èñïîëüçîâàíèÿ òàéìåðà.
  37. // EN: An example of using a timer.
  38. procedure Timer;
  39. begin
  40. // RU: Áóäåì â çàãîëîâêå ïîêàçûâàòü êîëè÷åñòâî êàäðîâ â ñåêóíäó.
  41. // EN: Caption will show the frames per second.
  42. wnd_SetCaption(utf8_Copy('01 - Initialization[ FPS: ' + u_IntToStr(zgl_Get(RENDER_FPS)) + ' ]'));
  43. end;
  44. procedure KeyMouseEvent;
  45. begin
  46. // RU: Ôóíêöèÿ îáðàáîòêè êëàâèàòóðû, ìûøè, äæîéñòèêà è òà÷ïàäà. Âñå ñîáûòèÿ ñâÿçàííûå ñ íèìè î÷èùàþòñÿ ïîñëå å¸ îáðàáîòêè.
  47. // Âñå ïîïûòêè îáðàáîòàòü êëàâèàòóðó, ìûøü è òà÷ïàä, ìîãóò ïðèâåñòè ê íåïðåäâèäåííûì ñèòóàöèÿì.
  48. // EN: Keyboard, mouse and touchpad handling function. All events associated with them are cleared after processing it.
  49. // Any attempt to handle the keyboard, mouse, or touchpad in other functions may lead to unexpected situations.
  50. end;
  51. procedure Quit;
  52. begin
  53. // RU: Ñîáûòèÿ êîòîðûå íàäî ïðîèçâåñòè ïî çàâåðøåíèþ ïðîãðàììû.
  54. // EN: Events to be performed at the end of the program.
  55. end;
  56. Begin
  57. // RU: Äëÿ çàãðóçêè/ñîçäàíèÿ êàêèõ-òî ñâîèõ íàñòðîåê/ïðîôèëåé/etc. ìîæíî ïîëó÷èòü ïóòü ê äîìàøåíåìó êàòàëîãó ïîëüçîâàòåëÿ, èëè ê èñïîëíÿåìîìó ôàéëó(íå ðàáîòàåò äëÿ GNU/Linux).
  58. // EN: For loading/creating your own options/profiles/etc. you can get path to user home directory, or to executable file(not works for GNU/Linux).
  59. DirApp := utf8_Copy(PAnsiChar(zgl_Get(DIRECTORY_APPLICATION)));
  60. DirHome := utf8_Copy(PAnsiChar(zgl_Get(DIRECTORY_HOME)));
  61. // RU: Óñòàíàâëèâàåì èíòåðâàë íà îáðàáîòêó ñîáûòèé êëàâèàòóðû, ìûøè, òà÷ïàäà. È ðåãèñòðèðóåì ïðîöåäóðó.
  62. // Âûçûâàòü zgl_SetEventInterval íå îáÿçàòåëüíî. Çíà÷åíèå 16 ñòîèò ïî óìîë÷àíèþ.
  63. // EN: We set the interval for processing keyboard, mouse, touchpad events. And we register the procedure.
  64. // Calling zgl_SetEventInterval is optional. The default is 16.
  65. zgl_SetEventsInterval(16);
  66. zgl_Reg(SYS_EVENTS, @KeyMouseEvent);
  67. // RU: Ñîçäàåì òàéìåð ñ èíòåðâàëîì 1000ìñ.
  68. // EN: Create a timer with interval 1000ms.
  69. TimeStart := timer_Add(@Timer, 1000, t_Start);
  70. // RU: Ðåãèñòðèðóåì ïðîöåäóðó, ÷òî âûïîëíèòñÿ ñðàçó ïîñëå èíèöèàëèçàöèè ZenGL.
  71. // EN: Register the procedure, that will be executed after ZenGL initialization.
  72. zgl_Reg(SYS_LOAD, @Init);
  73. // RU: Ðåãèñòðèðóåì ïðîöåäóðó, ãäå áóäåò ïðîèñõîäèòü ðåíäåð.
  74. // EN: Register the render procedure.
  75. zgl_Reg(SYS_DRAW, @Draw);
  76. // RU: Ðåãèñòðèðóåì ïðîöåäóðó, êîòîðàÿ áóäåò ïðèíèìàòü ðàçíèöó âðåìåíè ìåæäó êàäðàìè.
  77. // EN: Register the procedure, that will get delta time between the frames.
  78. zgl_Reg(SYS_UPDATE, @Update);
  79. // RU: Ðåãèñòðèðóåì ïðîöåäóðó, êîòîðàÿ âûïîëíèòñÿ ïîñëå çàâåðøåíèÿ ðàáîòû ZenGL.
  80. // EN: Register the procedure, that will be executed after ZenGL shutdown.
  81. zgl_Reg(SYS_EXIT, @Quit);
  82. // RU: Óñòàíàâëèâàåì çàãîëîâîê îêíà.
  83. // EN: Set the caption of the window.
  84. wndCaption := utf8_Copy('01 - Initialization');
  85. // RU: Ðàçðåøàåì êóðñîð ìûøè, ïî óìîë÷àíèþ ñòîèò True.
  86. // EN: Allow to show the mouse cursor.
  87. appShowCursor := True;
  88. // RU: Óêàçûâàåì ïåðâîíà÷àëüíûå íàñòðîéêè. Ïî óìîë÷àíèþ èìåííî òàê âñ¸ è ñòîèò.
  89. // EN: Set screen options.
  90. zgl_SetParam(800, 600, false, false);
  91. {$ifdef GL_VERSION_3_0}
  92. // RU: Óñòàíàâëèâàåì êîíòåêñò OpenGL 3.3. Äëÿ ýòîãî íàäî îòêëþ÷èòü äåôàéí USE_MIN_OPENGL â GLdefine.cfg
  93. // EN: Setting context OpenGL 3.3. Disable "USE_MIN_OPENGL" in GLdefine.cfg
  94. SetGLVersionAndFlags(3, 3);
  95. {$ENDIF}
  96. // RU: Èíèöèàëèçèðóåì ZenGL.
  97. // EN: Initialize ZenGL.
  98. zgl_Init();
  99. End.