glGenBuffers通过返回零表示什么?

时间:2019-03-01 06:04:15

标签: opengl language-lawyer

我的程序在启动后就在网络上加载了顶点数据后立即创建了许多顶点缓冲区,然后偶尔在热循环期间删除或创建顶点缓冲区。它几乎总是可以按预期工作,但是有时在某些计算机上,在热循环中创建缓冲区会产生零名称。

它看起来不像是无效状态,因为它会更早触发。另外,关于此类错误的文档和规范还不够清楚。这是否意味着实现用尽了缓冲区名称?

我还发现了this thread。 Topicstarter表示,在将名称传递给glGenBuffers之前对其进行初始化可以解决他的问题。有必要初始化这些值吗?

1 个答案:

答案 0 :(得分:0)

由于它似乎可以在某些机器上运行,因此glGenBuffer返回0可能是由于上下文设置不正确。 Here davek20在glGenBuffers中也有同样的问题。他通过修复错误的上下文设置解决了该问题。

here在GLFW“入门”页面上所述,它们在“创建窗口和上下文”下声明

  

“如果计算机不支持所需的最低版本,则上下文(和窗口)创建失败。”

并且您的这些机器可能具有正确的驱动程序,但可能不支持全部或某些版本的OpenGL,如文档所述。

如果您使用的是GLFW_CONTEXT_VERSION_MAJORGLFW_CONTEXT_VERSION_MINOR,请考虑更改它们。我还建议检查上下文创建是否返回NULL(0)。

来自GLFW文档页面的示例:

GLFWwindow* window;

if (!glfwInit())
    return -1;

glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

window = glfwCreateWindow(960, 540, "OpenGL", NULL, NULL);
if (!window)
{
    glfwTerminate();
    return -1;
}