如何知道opengl函数是否会阻塞?

时间:2019-05-02 13:38:39

标签: linux opengl opengl-es opengl-es-2.0 wayland

我正在将Wayland与IVI extension一起使用。我有一个程序可以显示摄像机图像,并且使用dbus进行控制。

我发现,如果隐藏了表面,则opengl函数将阻塞程序(阻塞的是glClear( GL_COLOR_BUFFER_BIT );)。我发现this discussion,说明此行为符合预期。

是否可以检查表面是否不可见,以防止程序被阻塞? 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 个答案:

答案 0 :(得分:3)

  

opengl中是否有任何东西可以查看某个函数是否要阻塞?

不。什么时候阻塞什么时候完全由实现定义的,并且在供应商之间可能完全不同,甚至可能取决于动态运行时条件,因此即使API序列相同,一个帧中的什么阻塞也可能不会在另一帧中阻塞。