demo04.dpr 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. program demo04;
  2. {$I zglCustomConfig.cfg}
  3. {$I zgl_config.cfg}
  4. {$R *.res}
  5. uses
  6. zgl_screen,
  7. zgl_window,
  8. zgl_timers,
  9. zgl_keyboard,
  10. zgl_font,
  11. zgl_text,
  12. zgl_sprite_2d,
  13. zgl_textures,
  14. zgl_textures_png,
  15. zgl_textures_jpg,
  16. zgl_utils,
  17. zgl_types,
  18. gegl_color;
  19. var
  20. dirRes : UTF8String {$IFNDEF MACOSX} = '../data/' {$ENDIF};
  21. fntMain : Byte;
  22. texBack : zglPTexture;
  23. procedure Init;
  24. begin
  25. fntMain := font_LoadFromFile(dirRes + 'font.zfi');
  26. texBack := tex_LoadFromFile(dirRes + 'back03.jpg');
  27. setTextColor(Get_Color(cl_White));
  28. setFontTextScale(15, fntMain);
  29. end;
  30. procedure Draw;
  31. begin
  32. ssprite2d_Draw(texBack, 0, 0, 800, 600, 0);
  33. text_Draw(fntMain, 0, 0, 'Escape - Exit' );
  34. text_Draw(fntMain, 0, 20 * 1, 'F1 - Fullscreen with desktop resolution and correction of aspect');
  35. text_Draw(fntMain, 0, 20 * 2, 'F2 - Fullscreen with desktop resolution and simple scaling');
  36. text_Draw(fntMain, 0, 20 * 3, 'F3 - Fullscreen with resolution 800x600');
  37. text_Draw(fntMain, 0, 20 * 4, 'F4 - Windowed mode');
  38. end;
  39. procedure KeyMouseEvent;
  40. begin
  41. // RU: Ðåêîìåíäóåìûé ê èñïîëüçîâàíèþ ïîëíîýêðàííûé ðåæèì. Îñíîâíàÿ èäåÿ - ïåðåêëþ÷èòüñÿ â ïîëíîýêðàííûé ðåæèì
  42. // èñïîëüçóÿ òåêóùåå ðàçðåøåíèå ðàáî÷åãî ñòîëà ïîëüçîâàòåëÿ, íî ïðè ýòîì
  43. // ñîõðàíèòü ïðîïîðöèè èçîáðàæåíèÿ. Ýòî ïîçâîëèò èçáåæàòü íåêîòîðûõ ïðîáëåì ñ LCD.
  44. // EN: Recommended fullscreen mode for using. Main idea is switching to fullscreen mode using current desktop resolution of user and saving the aspect. This will avoid some problems
  45. // with LCD's.
  46. if key_Press(K_F1) Then
  47. begin
  48. // RU: Âêëþ÷èòü êîððåêöèþ ïðîïîðöèé.
  49. // EN: Enable aspect correction.
  50. zgl_Enable(CORRECT_RESOLUTION);
  51. // RU: Óñòàíîâèòü ðàçðåøåíèå ïîä êîòîðîå èçíà÷àëüíî íàïèñàíî ïðèëîæåíèå.
  52. // EN: Set resolution for what application was wrote.
  53. scr_CorrectResolution(800, 600);
  54. zgl_SetParam(zgl_Get(DESKTOP_WIDTH), zgl_Get(DESKTOP_HEIGHT), True, false);
  55. (* --------------------- OR!!! ----------------------------------------
  56. wndWidth := zgl_Get( DESKTOP_WIDTH );
  57. wndHeight := zgl_Get( DESKTOP_HEIGHT );
  58. wndFullScreen := True;
  59. scrVSync := False;
  60. -------------------------------------------------------------------- *)
  61. scr_SetOptions();
  62. end;
  63. // RU: Ñõîæèé ðåæèì ñ ïðåäûäóùèì çà îäíèì èñêëþ÷åíèåì - îòêëþ÷åíà êîððåêöèÿ ïî øèðèíå è âûñîòå. Íàïðèìåð, îòêëþ÷åíèå êîððåêöèè ïî âûñîòå ìîæåò ïðèãîäèòüñÿ ïðè ñîîòîøåíèè
  64. // ñòîðîí 5:4(ðàçðåøåíèå ýêðàíà 1280x1024), ò.ê. ìîæíî çàïîëíèòü âñþ îáëàñòü ýêðàíà áåç ñóùåñòâåííûõ èñêàæåíèé.
  65. // EN: Similar mode to previous one with one exception - disabled correction for width and height. E.g. this can be useful for aspect 5:4(resolution 1280x1024),
  66. // because screen can be filled without significant distortion.
  67. if key_Press(K_F2) Then
  68. begin
  69. zgl_Enable(CORRECT_RESOLUTION);
  70. zgl_Disable(CORRECT_WIDTH);
  71. zgl_Disable(CORRECT_HEIGHT);
  72. scr_CorrectResolution(800, 600);
  73. { wndWidth := zgl_Get(DESKTOP_WIDTH);
  74. wndHeight := zgl_Get(DESKTOP_HEIGHT);
  75. wndFullScreen := true; }
  76. zgl_SetParam(zgl_Get(DESKTOP_WIDTH), zgl_Get(DESKTOP_HEIGHT), True, false);
  77. (* --------------------- OR!!! ----------------------------------------
  78. wndWidth := zgl_Get( DESKTOP_WIDTH );
  79. wndHeight := zgl_Get( DESKTOP_HEIGHT );
  80. wndFullScreen := True;
  81. scrVSync := False;
  82. -------------------------------------------------------------------- *)
  83. scr_SetOptions();
  84. end;
  85. // RU: Ïåðåêëþ÷åíèå â ïîëíîýêðàííûé ðåæèì èñïîëüçóÿ óêàçàííûå ðàçìåðû.  íàøå âðåìÿ òàêîé ïîäõîä èìååò äâà áîëüøèõ íåäîñòàòêà íà LCD:
  86. // - åñëè óêàçûâàåìîå ðàçðåøåíèå íå ÿâëÿåòñÿ ðîäíûì äëÿ LCD, òî áåç ñïåöèàëüíûõ íàñòðîéêàõ â äðàéâåðàõ ïîëüçîâàòåëü áóäåò íàáëþäàòü ïèêñåëèçàöèþ
  87. // - íà øèðîêîýêðàííûõ ìîíèòîðàõ êàðòèíêà ñ ñîîòíîøåíèåì 4:3 áóäåò ñìîòðåòñÿ ðàñòÿíóòîé
  88. // EN: Switching to fullscreen mode using set values. Nowadays this method two main problems with LCD:
  89. // - if used resolution is not main for LCD, then without special options in drivers user will see pixelization
  90. // - picture with aspect 4:3 will be stretched on widescreen monitors
  91. if key_Press(K_F3 ) Then
  92. begin
  93. zgl_Disable(CORRECT_RESOLUTION);
  94. zgl_SetParam(800, 600, true, false);
  95. (* ---------------------- OR!!! ----------------------------------------
  96. wndWidth := 800;
  97. wndHeight := 600;
  98. wndFullScreen := True;
  99. scrVSync := False;
  100. scr_SetOptions();
  101. -------------------------------------------------------------------- *)
  102. scr_SetOptions();
  103. end;
  104. // äëÿ ïîíèìàíèÿ, ðåæèì áåç êîððåêòèðîâêè - ýòî ðåàëüíûé ïîëíîýêðàííûé ðåæèì!!! Òî÷íåå - 1-é è 2-é ýòî îêîííûå ðåæèìû,
  105. // à òðåòèé - ýòî ïîëíîýêðàííûé.
  106. // À ýòî îçíà÷àåò, ÷òî åãî íàäî âûáèðàòü òîëüêî èç ñïèñêà ñóùåñòâóþùèõ âèäåîðåæèìîâ!!!
  107. // RU: Îêîííûé ðåæèì.
  108. // EN: Windowed mode.
  109. if key_Press(K_F4) Then
  110. begin
  111. zgl_Disable(CORRECT_RESOLUTION);
  112. (* ---------------------- OR!!! ----------------------------------------
  113. wndWidth := 800;
  114. wndHeight := 600;
  115. wndFullScreen := False;
  116. scrVSync := False;
  117. -------------------------------------------------------------------- *)
  118. zgl_SetParam(800, 600, False, false);
  119. scr_SetOptions();
  120. end;
  121. end;
  122. Begin
  123. zgl_Reg(SYS_EVENTS, @KeyMouseEvent);
  124. zgl_Reg( SYS_LOAD, @Init );
  125. zgl_Reg( SYS_DRAW, @Draw );
  126. wnd_SetCaption(utf8_Copy('04 - Screen Settings'));
  127. zgl_Init();
  128. End.