1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- program demo15;
- {$I zglCustomConfig.cfg}
- {$I zgl_config.cfg}
- {$R *.res}
- uses
- zgl_screen,
- zgl_window,
- zgl_timers,
- zgl_keyboard,
- zgl_mouse,
- zgl_textures,
- zgl_textures_png,
- zgl_font,
- zgl_text,
- zgl_primitives_2d,
- zgl_sprite_2d,
- zgl_video,
- zgl_video_theora,
- zgl_utils,
- zgl_types,
- gegl_color;
- var
- dirRes : UTF8String {$IFNDEF MACOSX} = '../data/' {$ENDIF};
- fntMain : LongWord;
- video : zglPVideoStream;
- videoSeek: Boolean;
- newColor : LongWord;
- procedure Init;
- begin
- fntMain := font_LoadFromFile(dirRes + 'font.zfi');
- // EN: Open the video file.
- // RU: Îòêðûòü âèäåî ôàéë.
- video := video_OpenFile(dirRes + 'video.ogv');
- setFontTextScale(15, fntMain);
- newColor := Color_FindOrAdd($A0AA4090);
- end;
- procedure Draw;
- begin
- if Assigned(video) Then
- begin
- // EN: Rendering the current video frame in the center of screen using parameters of it from video.Info.
- // RU: Ðåíäåðèíã òåêóùåãî êàäðà âèäåî â öåíòðå ýêðàíà èñïîëüçóÿ ïàðàìåòðû èç video.Info.
- ssprite2d_Draw(video.Texture, (800 - video.Info.Width) / 2, (600 - video.Info.Height) / 2, video.Info.Width, video.Info.Height, 0);
- // EN: Rendering of progress bar.
- // RU: Ðåíäåðèíã ïîëîñû ïðîãðåññà.
- pr2d_Rect(0, 600 - 100, 800, 20, cl_Green);
- pr2d_Rect(0, 600 - 100, (800 / video.Info.Duration) * video.Time, 20, newColor, PR2D_FILL);
- text_Draw(fntMain, 0, 0, 'FPS: ' + u_IntToStr(zgl_Get(RENDER_FPS)));
- text_Draw(fntMain, 0, 20, 'Frame: ' + u_IntToStr(video.Frame));
- text_Draw(fntMain, 100, 0, 'Duration: ' + u_FloatToStr(video.Info.Duration / 1000));
- text_Draw(fntMain, 100, 20, 'Frames: ' + u_IntToStr(video.Info.Frames));
- text_Draw(fntMain, 230, 0, 'Time: ' + u_FloatToStr(video.Time / 1000));
- end;
- end;
- procedure KeyMouseEvent;
- begin
- // EN: If left mouse button is down on progress bar, then seek the video.
- // RU: Åñëè çàæàòà ëåâàÿ êíîïêà ìûøè íàä ïîëîñîé ïðîãðåññà - ïåðåìåùàòüñÿ ïî âèäåî.
- if mouseBDown(M_BLEFT) and (mouse_Y > 500) and (mouse_Y < 520) Then
- begin
- videoSeek := TRUE;
- video_Seek(video, (mouse_X / 800) * video.Info.Duration);
- end else
- videoSeek := FALSE;
- end;
- procedure Update(dt: Double);
- begin
- if not videoSeek Then
- video_Update(video, dt, TRUE);
- end;
- Begin
- randomize();
- zgl_Reg(SYS_EVENTS, @KeyMouseEvent);
- zgl_Reg(SYS_LOAD, @Init);
- zgl_Reg(SYS_DRAW, @Draw);
- zgl_Reg(SYS_UPDATE, @Update);
- wnd_SetCaption(utf8_Copy('15 - Video'));
- zgl_Init();
- End.
|