如果出于某种原因无法创建缓冲区,glGenBuffers(或任何GL gen函数)的行为究竟是什么?是否通过函数将缓冲区设置为零以指示失败?如果是这种情况,文档没有提及它。基本上我在问这是否安全:
GLuint buffer; //uninitialized variable
glGenBuffers(1, &buffer);
if(buffer)
{
...
}
如果glGenBuffers在发生故障时没有将缓冲区设置为零,那么缓冲区将保持未初始化状态并导致未定义的行为。
答案 0 :(得分:3)
出现错误时,OpenGL参考手册doesn't say anything about NULLing buffers for glGenBuffers。因此,依靠它将是一个很好的想法。
相反,它表示可能会生成GL_INVALID_VALUE。您可以使用if (glGetError() == GL_NO_ERROR)检查错误,而不是检查缓冲区。
虽然我强烈建议一直检查错误代码,但在这种特殊情况下,它可能有点过分。在我看来,如果你使用glGenBuffers来初始化单个缓冲区,它将永远不会失败,因为n
保证是正的(n = 1)。所以glGenBuffers要么成功要么崩溃可怕。所以在任何情况下都不需要检查错误。