gpt4 book ai didi

opengl - 有没有办法判断OpenGL操作是否完成?

转载 作者:行者123 更新时间:2023-12-04 04:05:46 28 4
gpt4 key购买 nike

OpenGL函数的定义就好像它们是同步运行的一样。但是渲染功能(和其他功能)通常会由GPU异步执行。 OpenGL将有效地隐藏这一点:如果您执行需要操作结果的操作(例如,从已渲染到的帧缓冲区中读取数据),则OpenGL将停止CPU操作,直到GPU达到该点为止。

这是功能性的,但对于性能而言却并非理想选择,因为CPU基本上会阻塞,直到GPU完成为止。有没有一种方法可以确定某个特定的操作是否已完成,从而使您知道在没有太多CPU阻塞的情况下将执行从属操作?

最佳答案

就在这里。假设您可以访问OpenGL 3.2+或ARB_sync扩展。

如果您想知道特定命令何时完成,可以在发出该命令后立即在命令流中插入“fence” sync object。这是通过 glFenceSync function完成的。

您必须存储此函数返回的指针。有了该指针,您可以通过检查 glGetSync function是否用信号通知了隔离栅是否已完成。像这样:

GLint isSignaled = 0;
glGetSync(syncObj, GL_SYNC_STATUS, 1, NULL, &isSignaled);

if(isSignaled == GL_SIGNALED)
{
//Prior commands have completed.
}
else
{
//Not done yet.
}

如果您没有其他工作要做,则无需等待同步对象完成;您可以做任何您想做的OpenGL处理​​。这将为您带来CPU阻塞。

完成同步对象后,必须将其删除。使用 glDeleteSync function可以做到这一点。

关于opengl - 有没有办法判断OpenGL操作是否完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18217829/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com