我开发了一种安全关键应用程序,必须以每秒30帧的速度运行。 如果它无法提供30fps或任何其他错误,我们会画黑屏。
我想尽可能多地通过glGetError调用来查询错误标志,但我担心它会阻止绘图线程更长的时间(几毫秒)。
glGetError调用是否可以阻塞线程,直到最新的opengl命令没有被处理?
如果不是,我怎么知道在执行最新的opengl命令时是否有错误?
技术参数: - Linux 2.6.20-1.21 - Nvidia Quadro NVS 285 - libGL.so.100.14.19
答案 0 :(得分:4)
GL规范中没有任何内容保证任何关于阻塞(或性能特征)。
现在,我见过的大多数实现的glGetError实际上都没有与GPU硬件的任何交互,只是驱动程序的API部分。简而言之,它不应该阻止(警告:实现细节)。
作为旁注,应该在GPU上生成并检查GL错误的各个地方,规范几乎说明了行为是未定义的而不是错误生成,特别是没有这个问题。
最后,glxSwapBuffer更可能是一个你会看到阻塞发生的地方,因为你的GPU仍在忙于绘制前一帧(因此驱动程序通常会选择这一点以确保CPU不会过于遥远)。