demo15.dpr 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. program demo15;
  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_mouse,
  11. zgl_textures,
  12. zgl_textures_png,
  13. zgl_font,
  14. zgl_text,
  15. zgl_primitives_2d,
  16. zgl_sprite_2d,
  17. zgl_video,
  18. zgl_video_theora,
  19. zgl_utils,
  20. zgl_types,
  21. gegl_color;
  22. var
  23. dirRes : UTF8String {$IFNDEF MACOSX} = '../data/' {$ENDIF};
  24. fntMain : LongWord;
  25. video : zglPVideoStream;
  26. videoSeek: Boolean;
  27. newColor : LongWord;
  28. procedure Init;
  29. begin
  30. fntMain := font_LoadFromFile(dirRes + 'font.zfi');
  31. // EN: Open the video file.
  32. // RU: Îòêðûòü âèäåî ôàéë.
  33. video := video_OpenFile(dirRes + 'video.ogv');
  34. setFontTextScale(15, fntMain);
  35. newColor := Color_FindOrAdd($A0AA4090);
  36. end;
  37. procedure Draw;
  38. begin
  39. if Assigned(video) Then
  40. begin
  41. // EN: Rendering the current video frame in the center of screen using parameters of it from video.Info.
  42. // RU: Ðåíäåðèíã òåêóùåãî êàäðà âèäåî â öåíòðå ýêðàíà èñïîëüçóÿ ïàðàìåòðû èç video.Info.
  43. ssprite2d_Draw(video.Texture, (800 - video.Info.Width) / 2, (600 - video.Info.Height) / 2, video.Info.Width, video.Info.Height, 0);
  44. // EN: Rendering of progress bar.
  45. // RU: Ðåíäåðèíã ïîëîñû ïðîãðåññà.
  46. pr2d_Rect(0, 600 - 100, 800, 20, cl_Green);
  47. pr2d_Rect(0, 600 - 100, (800 / video.Info.Duration) * video.Time, 20, newColor, PR2D_FILL);
  48. text_Draw(fntMain, 0, 0, 'FPS: ' + u_IntToStr(zgl_Get(RENDER_FPS)));
  49. text_Draw(fntMain, 0, 20, 'Frame: ' + u_IntToStr(video.Frame));
  50. text_Draw(fntMain, 100, 0, 'Duration: ' + u_FloatToStr(video.Info.Duration / 1000));
  51. text_Draw(fntMain, 100, 20, 'Frames: ' + u_IntToStr(video.Info.Frames));
  52. text_Draw(fntMain, 230, 0, 'Time: ' + u_FloatToStr(video.Time / 1000));
  53. end;
  54. end;
  55. procedure KeyMouseEvent;
  56. begin
  57. // EN: If left mouse button is down on progress bar, then seek the video.
  58. // RU: Åñëè çàæàòà ëåâàÿ êíîïêà ìûøè íàä ïîëîñîé ïðîãðåññà - ïåðåìåùàòüñÿ ïî âèäåî.
  59. if mouseBDown(M_BLEFT) and (mouse_Y > 500) and (mouse_Y < 520) Then
  60. begin
  61. videoSeek := TRUE;
  62. video_Seek(video, (mouse_X / 800) * video.Info.Duration);
  63. end else
  64. videoSeek := FALSE;
  65. end;
  66. procedure Update(dt: Double);
  67. begin
  68. if not videoSeek Then
  69. video_Update(video, dt, TRUE);
  70. end;
  71. Begin
  72. randomize();
  73. zgl_Reg(SYS_EVENTS, @KeyMouseEvent);
  74. zgl_Reg(SYS_LOAD, @Init);
  75. zgl_Reg(SYS_DRAW, @Draw);
  76. zgl_Reg(SYS_UPDATE, @Update);
  77. wnd_SetCaption(utf8_Copy('15 - Video'));
  78. zgl_Init();
  79. End.