demo15.lpr 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. library demo15;
  2. {$I zgl_config.cfg}
  3. {$I zglCustomConfig.cfg}
  4. uses
  5. zgl_application,
  6. zgl_file,
  7. zgl_memory,
  8. zgl_screen,
  9. zgl_window,
  10. zgl_timers,
  11. zgl_touch,
  12. zgl_textures,
  13. zgl_textures_png,
  14. zgl_font,
  15. zgl_text,
  16. zgl_primitives_2d,
  17. zgl_sprite_2d,
  18. zgl_video,
  19. zgl_video_theora,
  20. zgl_types,
  21. gegl_color,
  22. zgl_utils;
  23. var
  24. dirRes : UTF8String = 'assets/';
  25. fntMain : LongWord;
  26. video : zglPVideoStream;
  27. videoFile : zglTMemory;
  28. videoSeek : Boolean;
  29. newColor : LongWord;
  30. procedure Init;
  31. begin
  32. zgl_Enable( CORRECT_RESOLUTION );
  33. scr_CorrectResolution( 800, 600 );
  34. file_OpenArchive( PAnsiChar( zgl_Get( DIRECTORY_APPLICATION ) ) );
  35. fntMain := font_LoadFromFile( dirRes + 'font.zfi' );
  36. mem_LoadFromFile( videoFile, dirRes + 'video.ogv' );
  37. file_CloseArchive();
  38. // EN: Open the video file.
  39. // RU: Открыть видео файл.
  40. video := video_OpenMemory( videoFile, 'OGV' );
  41. setFontTextScale(20, fntMain);
  42. newColor := Color_FindOrAdd($A0AA4090);
  43. end;
  44. procedure Draw;
  45. begin
  46. if Assigned( video ) Then
  47. begin
  48. // EN: Rendering the current video frame in the center of screen using parameters of it from video.Info.
  49. // RU: Рендеринг текущего кадра видео в центре экрана используя параметры из video.Info.
  50. ssprite2d_Draw( video^.Texture, ( 800 - video^.Info.Width ) / 2, ( 600 - video^.Info.Height ) / 2, video^.Info.Width, video^.Info.Height, 0 );
  51. // EN: Rendering of progress bar.
  52. // RU: Рендеринг полосы прогресса.
  53. pr2d_Rect( 4, 600 - 100, 792, 20, cl_Green );
  54. pr2d_Rect( 4, 600 - 100, ( 792 / video^.Info.Duration ) * video^.Time, 20, newColor, PR2D_FILL );
  55. text_Draw( fntMain, 0, 0, 'FPS: ' + u_IntToStr( zgl_Get( RENDER_FPS ) ) );
  56. text_Draw( fntMain, 0, 20, 'Frame: ' + u_IntToStr( video^.Frame ) );
  57. text_Draw( fntMain, 100, 0, 'Duration: ' + u_FloatToStr( video^.Info.Duration / 1000 ) );
  58. text_Draw( fntMain, 100, 20, 'Frames: ' + u_IntToStr( video^.Info.Frames ) );
  59. text_Draw( fntMain, 230, 0, 'Time: ' + u_FloatToStr( video^.Time / 1000 ) );
  60. end;
  61. end;
  62. procedure KeyMouseEvent;
  63. begin
  64. // EN: Seek the video if finger is on the screen.
  65. // RU: Перемещаться по видео если пальцем водят по экрану.
  66. if touch_Click( 0 ) Then
  67. begin
  68. videoSeek := TRUE;
  69. video_Seek( video, ( touch_X( 0 ) / 800 ) * video^.Info.Duration );
  70. end else
  71. videoSeek := FALSE;
  72. end;
  73. procedure Update( dt : Double );
  74. begin
  75. if not videoSeek Then
  76. video_Update( video, dt, TRUE );
  77. end;
  78. procedure Restore;
  79. begin
  80. file_OpenArchive( PAnsiChar( zgl_Get( DIRECTORY_APPLICATION ) ) );
  81. font_RestoreFromFile( fntMain, dirRes + 'font.zfi' );
  82. file_CloseArchive();
  83. video_Restore( video );
  84. end;
  85. procedure Java_zengl_android_ZenGL_Main( var env; var thiz ); cdecl;
  86. begin
  87. randomize();
  88. zgl_Reg(SYS_EVENTS, @KeyMouseEvent);
  89. zgl_Reg( SYS_LOAD, @Init );
  90. zgl_Reg( SYS_DRAW, @Draw );
  91. zgl_Reg( SYS_UPDATE, @Update );
  92. zgl_Reg( SYS_ANDROID_RESTORE, @Restore );
  93. scr_SetOptions();
  94. end;
  95. exports
  96. Java_zengl_android_ZenGL_Main,
  97. {$I android_export.inc}
  98. End.