Skip to content

Commit d806167

Browse files
committed
Update embox_lib_fps_en.md
1 parent 588b11d commit d806167

File tree

2 files changed

+86
-7
lines changed

2 files changed

+86
-7
lines changed

en/libs/embox_lib_fps_en.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
# FPS: Helpful library for video output
1+
# FPS: Useful library for video output
22

3-
From the name of this library it's clear that it's supposed to be used for frame-per-second count, but it also have a number of features which can help you to work with graphics output.
3+
From the name of this library it's clear that it's supposed to be used for frame-per-second count, but it also have a number of features, which can help you to work with graphics output.
44

55
## Interface
66

@@ -10,16 +10,16 @@ Header file: `#include <fps/fps.h>`
1010

1111
## Basic usage
1212

13-
At first make sure to be familiar with frame buffer interface: [[Frame buffer]]
13+
At first, make sure to be familiar with frame buffer interface: [[Frame buffer]].
1414

15-
After your obtained `struct fb_info *`, you can use FPS library as simple as follows:
15+
After you obtained `struct fb_info *`, you can use FPS library as simple as follows:
1616
```c
1717
struct fb_info *fbi = fb_lookup(0);
1818
fps_set_format("Hello, world!");
1919
fps_print(fbi);
2020
```
2121
22-
Now `Hello, world!` should appear at the left upper corner of the screen. This doesn't seem very helpful, so let's actually print FPS rate.
22+
Now `Hello, world!` should appear at the left upper corner of the screen. This doesn't seem very useful, so let's actually print FPS rate:
2323
2424
```c
2525
struct fb_info *fbi = fb_lookup(0);
@@ -39,7 +39,7 @@ Sometimes rendering scene takes a lot of time, so if we draw directly to frame b
3939

4040
The idea is to store additional "back" buffer for drawing, while main frame remains unchanged.
4141

42-
First way to use it is as follows:
42+
The first way to use it is as follows:
4343
```c
4444
struct fb_info *fbi = fb_lookup(0);
4545

@@ -76,5 +76,5 @@ Things can be more tricky if you want frame to be placed in certain memory area
7676
}
7777
```
7878

79-
NOTE: This will work in a correct way only if given FB supports chaning base of the frame buffer. Otherwise only "simple" double-buffering example will work.
79+
NOTE: This will work in a correct way only if given video output device supports changing base of the frame buffer. Otherwise, only "simple" double-buffering example will work.
8080

ru/libs/embox_lib_fps_ru.md

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
# FPS: Полезная библиотека для вывода видео
2+
3+
Из названия библиотеки (FPS -- «frame-per-second») следует, что её можно использовать для подсчёта кадров в секунду. Но она также имеет ряд функций, которые могут помочь Вам в работе с графическим выводом.
4+
5+
## Интерфейс
6+
7+
Название модуля -- `embox.lib.fps`, поэтому Вам следует или добавить `depends embox.lib.fps` в Ваш модуль «Mybuild», или явно вставить `include embox.lib.fps` в `conf/mods.conf` (хотя второй вариант использовать не рекомендуется).
8+
9+
Заголовочный файл: `#include <fps/fps.h>`.
10+
11+
## Основное применение
12+
13+
Для начала убедитесь, что Вы знакомы с интерфейсом фрейм-буфера: [[Frame buffer]].
14+
15+
После того, как Вы получили `struct fb_info *`, Вы можете использовать FPS-библиотеку так же просто, как в следующем примере:
16+
```c
17+
struct fb_info *fbi = fb_lookup(0);
18+
fps_set_format("Hello, world!");
19+
fps_print(fbi);
20+
```
21+
22+
Теперь надпись `Hello, world!` должна появиться в левом верхнем углу экрана. Да, это не выглядит как что-то полезное, поэтому давайте выведем на экран фактическую скорость кадров в секунду:
23+
24+
```c
25+
struct fb_info *fbi = fb_lookup(0);
26+
/* Формат по умолчанию -- «Embox FPS=%d» */
27+
fps_set_format("Hello, world!\nFPS=%d"); /* \n работает в случае с format string */
28+
while(1) {
29+
fps_print(fbi);
30+
msleep(100);
31+
}
32+
```
33+
34+
Теперь на экране (на второй строчке) должна появиться надпись наподобие «FPS=10».
35+
36+
## Двойная буферизация
37+
38+
Иногда рендеринг сцены занимает много времени, поэтому, если мы отрисовываем сцену непосредственно на базе фрейм-буфера, на экране появятся помехи или т. н. глитчи. Двойная буферизация -- это метод, который позволяет решить эту проблему.
39+
40+
Идея в том, чтобы хранить дополнительный буфер «back» для отрисовки, пока основной фрейм остаётся неизменным.
41+
42+
Ниже представлен первый способ использования «back»-буфера:
43+
```c
44+
struct fb_info *fbi = fb_lookup(0);
45+
46+
fps_enable_swap(fbi);
47+
48+
while (1) {
49+
uint8_t *current_frame = fps_current_frame_fbi);
50+
draw_something(current_frame);
51+
fps_print(fbi);
52+
/* Переместить содержимое «back»-буфера на экран */
53+
fps_swap(fbi);
54+
}
55+
```
56+
57+
Способы могут быть более мудрёными, если Вы хотите, чтобы фрейм был помещён в определённую область памяти (например, если это специализированная память конкретного устройства для временного буфера). В этом случае Вы можете установить основу фрейма, используя следующие функции:
58+
59+
```c
60+
void fps_set_base_frame(struct fb_info *fb, void *base_frame);
61+
void fps_set_back_frame(struct fb_info *fb, void *base_back_frame);
62+
63+
/* Простой пример может выглядеть следующим образом */
64+
struct fb_info *fbi = fb_lookup(0);
65+
66+
fps_set_base_frame(fbi, some_addr_1);
67+
fps_set_back_frame(fbi, some_addr_2);
68+
69+
while (1) {
70+
uint8_t *current_frame = fps_current_frame_fbi);
71+
draw_something(current_frame);
72+
fps_print(fbi);
73+
74+
/* Переместить содержимое «back»-буфера на экран */
75+
fps_swap(fbi);
76+
}
77+
```
78+
79+
Обратите внимание: это будет корректно работать только в случае, если данное устройство вывода видео поддерживает изменение базы фрейм-буфера. В противном случае, будет работать только «простой» пример двойной буферизации.

0 commit comments

Comments
 (0)