Как узнать, собирается ли функция opengl блокировать? - PullRequest
1 голос
/ 02 мая 2019

Я использую Wayland с расширением IVI . У меня есть программа, показывающая изображение с камеры в суфраке, и она управляется с помощью dbus.

Я обнаружил, что если поверхность скрыта, то функции opengl блокируют программу (это glClear( GL_COLOR_BUFFER_BIT );, которая блокирует). Я нашел это обсуждение , которое объясняет, что это поведение соответствует ожиданиям.

Есть ли способ проверить, не видна ли поверхность, чтобы я мог предотвратить блокировку программы? Есть ли что-нибудь в opengl, чтобы увидеть, собирается ли функция блокировать?


Мой слой номер 1, поверхность 5242880, и изначально, когда запускается программа, моя сцена выглядит так:

root@pdm3:~# LayerManagerControl get scene
screen 0 (0x0)
---------------------------------------
- connector name:       Unknown-1
- resolution:           x=1280, y=480
- layer render order:   1(0x1),

    layer 1 (0x1)
    ---------------------------------------
    - destination region:   x=0, y=0, w=1280, h=480
    - source region:        x=0, y=0, w=1280, h=480
    - opacity:              1
    - visibility:           1
    - surface render order:
    - on screen:            0(0x0)

Чтобы показать изображение, и только тогда процесс разблокируется, и я могу получить к нему доступ через dbus, мне нужно сделать следующие вещи:

 LayerManagerControl set layer 1 render order 5242880
 LayerManagerControl set surface 5242880 source region 0 0 200 200
 LayerManagerControl set surface 5242880 destination region 0 0 200 200
 LayerManagerControl set surface 5242880 visibility 1

1 Ответ

3 голосов
/ 03 мая 2019

Есть ли что-нибудь в opengl, чтобы увидеть, собирается ли функция блокироваться?

Нет.Какие блоки и когда полностью определяются реализацией, могут быть совершенно разными у разных поставщиков и могут даже зависеть от динамических условий времени выполнения, поэтому блоки в одном кадре могут не блокироваться в другом, даже если последовательность API одинакова.

...