demo15.lpr 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. program demo15;
  2. {$I zglCustomConfig.cfg}
  3. {$I zgl_config.cfg}
  4. {$IFDEF WINDOWS}
  5. {$R *.res}
  6. {$ENDIF}
  7. uses
  8. {$IFDEF UNIX}
  9. cthreads,
  10. {$ENDIF}
  11. {$IFDEF USE_ZENGL_STATIC}
  12. zgl_screen,
  13. zgl_window,
  14. zgl_timers,
  15. zgl_keyboard,
  16. zgl_mouse,
  17. zgl_textures,
  18. zgl_textures_png,
  19. zgl_font,
  20. zgl_text,
  21. zgl_primitives_2d,
  22. zgl_sprite_2d,
  23. zgl_video,
  24. zgl_video_theora,
  25. zgl_utils,
  26. zgl_types,
  27. gegl_color
  28. {$ELSE}
  29. zglHeader
  30. {$ENDIF}
  31. ;
  32. var
  33. dirRes : UTF8String {$IFNDEF MACOSX} = '../data/' {$ENDIF};
  34. fntMain : LongWord;
  35. video : zglPVideoStream;
  36. videoSeek : Boolean;
  37. newColor : LongWord;
  38. procedure Init;
  39. begin
  40. fntMain := font_LoadFromFile( dirRes + 'font.zfi' );
  41. // EN: Open the video file.
  42. // RU: Открыть видео файл.
  43. video := video_OpenFile( dirRes + 'video.ogv' );
  44. setFontTextScale(15, fntMain);
  45. newColor := Color_FindOrAdd($A0AA4090);
  46. end;
  47. procedure Draw;
  48. begin
  49. if Assigned( video ) Then
  50. begin
  51. // EN: Rendering the current video frame in the center of screen using parameters of it from video.Info.
  52. // RU: Рендеринг текущего кадра видео в центре экрана используя параметры из video.Info.
  53. ssprite2d_Draw( video.Texture, ( 800 - video.Info.Width ) / 2, ( 600 - video.Info.Height ) / 2, video.Info.Width, video.Info.Height, 0 );
  54. // EN: Rendering of progress bar.
  55. // RU: Рендеринг полосы прогресса.
  56. pr2d_Rect( 0, 600 - 100, 800, 20, cl_Green );
  57. pr2d_Rect( 0, 600 - 100, ( 800 / video.Info.Duration ) * video.Time, 20, newColor, PR2D_FILL );
  58. text_Draw( fntMain, 0, 0, 'FPS: ' + u_IntToStr( zgl_Get( RENDER_FPS ) ) );
  59. text_Draw( fntMain, 0, 20, 'Frame: ' + u_IntToStr( video.Frame ) );
  60. text_Draw( fntMain, 100, 0, 'Duration: ' + u_FloatToStr( video.Info.Duration / 1000 ) );
  61. text_Draw( fntMain, 100, 20, 'Frames: ' + u_IntToStr( video.Info.Frames ) );
  62. text_Draw( fntMain, 230, 0, 'Time: ' + u_FloatToStr( video.Time / 1000 ) );
  63. end;
  64. end;
  65. procedure KeyMouseEvent;
  66. begin
  67. // EN: If left mouse button is down on progress bar, then seek the video.
  68. // RU: Если зажата левая кнопка мыши над полосой прогресса - перемещаться по видео.
  69. if mouseBDown(M_BLEFT) and ( mouse_Y() > 500 ) and ( mouse_Y() < 520 ) Then
  70. begin
  71. videoSeek := TRUE;
  72. video_Seek( video, ( mouse_X() / 800 ) * video.Info.Duration );
  73. end else
  74. videoSeek := FALSE;
  75. end;
  76. procedure Update( dt : Double );
  77. begin
  78. if not videoSeek Then
  79. video_Update( video, dt, TRUE );
  80. end;
  81. Begin
  82. {$IFNDEF USE_ZENGL_STATIC}
  83. if not zglLoad( libZenGL ) Then exit;
  84. {$ENDIF}
  85. randomize();
  86. zgl_Reg(SYS_EVENTS, @KeyMouseEvent);
  87. zgl_Reg( SYS_LOAD, @Init );
  88. zgl_Reg( SYS_DRAW, @Draw );
  89. zgl_Reg( SYS_UPDATE, @Update );
  90. wnd_SetCaption(utf8_Copy('15 - Video'));
  91. zgl_Init();
  92. End.