demo15.pas 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. program demo15;
  2. {$I zglCustomConfig.cfg}
  3. uses
  4. zgl_main,
  5. zgl_screen,
  6. zgl_window,
  7. zgl_timers,
  8. zgl_keyboard,
  9. zgl_touch,
  10. zgl_textures,
  11. zgl_textures_png,
  12. zgl_font,
  13. zgl_text,
  14. zgl_primitives_2d,
  15. zgl_sprite_2d,
  16. zgl_video,
  17. zgl_video_theora,
  18. zgl_utils
  19. ;
  20. var
  21. dirRes : UTF8String = 'data/';
  22. fntMain : zglPFont;
  23. video : zglPVideoStream;
  24. videoSeek : Boolean;
  25. procedure Init;
  26. begin
  27. zgl_Enable( CORRECT_RESOLUTION );
  28. scr_CorrectResolution( 800, 600 );
  29. fntMain := font_LoadFromFile( dirRes + 'font.zfi' );
  30. // EN: Open the video file.
  31. // RU: Открыть видео файл.
  32. video := video_OpenFile( dirRes + 'video.ogv' );
  33. end;
  34. procedure Draw;
  35. begin
  36. if Assigned( video ) Then
  37. begin
  38. // EN: Rendering the current video frame in the center of screen using parameters of it from video.Info.
  39. // RU: Рендеринг текущего кадра видео в центре экрана используя параметры из video.Info.
  40. ssprite2d_Draw( video.Texture, ( 800 - video.Info.Width ) / 2, ( 600 - video.Info.Height ) / 2, video.Info.Width, video.Info.Height, 0 );
  41. // EN: Rendering of progress bar.
  42. // RU: Рендеринг полосы прогресса.
  43. pr2d_Rect( 4, 600 - 100, 792, 20, $00FF00, 255 );
  44. pr2d_Rect( 4, 600 - 100, ( 792 / video.Info.Duration ) * video.Time, 20, $00FF00, 155, PR2D_FILL );
  45. text_Draw( fntMain, 0, 0, 'FPS: ' + u_IntToStr( zgl_Get( RENDER_FPS ) ) );
  46. text_Draw( fntMain, 0, 20, 'Frame: ' + u_IntToStr( video.Frame ) );
  47. text_Draw( fntMain, 100, 0, 'Duration: ' + u_FloatToStr( video.Info.Duration / 1000 ) );
  48. text_Draw( fntMain, 100, 20, 'Frames: ' + u_IntToStr( video.Info.Frames ) );
  49. text_Draw( fntMain, 230, 0, 'Time: ' + u_FloatToStr( video.Time / 1000 ) );
  50. end;
  51. end;
  52. procedure Timer;
  53. begin
  54. if key_Press( K_ESCAPE ) Then zgl_Exit();
  55. // EN: Seek the video if finger is on the screen.
  56. // RU: Перемещаться по видео если пальцем водят по экрану.
  57. if touch_Down( 0 ) Then
  58. begin
  59. videoSeek := TRUE;
  60. video_Seek( video, ( touch_X( 0 ) / 800 ) * video.Info.Duration );
  61. end else
  62. videoSeek := FALSE;
  63. touch_ClearState();
  64. end;
  65. procedure Update( dt : Double );
  66. begin
  67. if not videoSeek Then
  68. video_Update( video, dt, TRUE );
  69. end;
  70. Begin
  71. randomize();
  72. timer_Add( @Timer, 16 );
  73. zgl_Reg( SYS_LOAD, @Init );
  74. zgl_Reg( SYS_DRAW, @Draw );
  75. zgl_Reg( SYS_UPDATE, @Update );
  76. scr_SetOptions( 800, 600, REFRESH_MAXIMUM, FALSE, FALSE );
  77. zgl_Init();
  78. End.