如何知道 opengl 函数是否会阻塞?
How to know if an opengl function is going to block?
我在 IVI extension 中使用 Wayland。我有一个程序,在 sufrace 中显示相机图像,它是使用 dbus 控制的。
我发现如果表面被隐藏,那么 opengl 函数会阻塞程序(阻塞的是 glClear( GL_COLOR_BUFFER_BIT );
)。我发现 this discussion,这说明此行为符合预期。
有什么方法可以检查表面是否不可见,从而防止程序被阻塞? opengl 中是否有任何东西可以查看某个函数是否会阻塞?
我的layer是1号,surface是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
Is there anything in opengl to see if a function is going to block?
没有。阻塞的内容和时间完全由实现定义,并且可能因供应商而完全不同,甚至可能取决于动态 运行 时间条件,因此一帧中的块可能不会阻塞另一帧,即使 API顺序相同。
我在 IVI extension 中使用 Wayland。我有一个程序,在 sufrace 中显示相机图像,它是使用 dbus 控制的。
我发现如果表面被隐藏,那么 opengl 函数会阻塞程序(阻塞的是 glClear( GL_COLOR_BUFFER_BIT );
)。我发现 this discussion,这说明此行为符合预期。
有什么方法可以检查表面是否不可见,从而防止程序被阻塞? opengl 中是否有任何东西可以查看某个函数是否会阻塞?
我的layer是1号,surface是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
Is there anything in opengl to see if a function is going to block?
没有。阻塞的内容和时间完全由实现定义,并且可能因供应商而完全不同,甚至可能取决于动态 运行 时间条件,因此一帧中的块可能不会阻塞另一帧,即使 API顺序相同。