我的程序在通过网络加载顶点数据刚启动后就创建了许多顶点缓冲区,然后在热循环期间偶尔删除或创建顶点缓冲区。它几乎总是像预期的那样工作,但有时在某些机器上,热循环中的缓冲区创建会产生零名称。
它看起来不像一个无效的状态,因为它会更早地触发。另外,文档和规范对于这种类型的错误还不够清楚。这是否意味着实现没有缓冲区名称?
我还找到了这条线。Topicstarter说,在将名字传递给glGenBuffers之前初始化它们可以解决他的问题。是否有必要初始化这些值?
发布于 2019-03-01 23:08:34
由于它似乎在某些机器上工作,所以返回0的glGenBuffer可能是由于设置不当的上下文。这里 davek20在glGenBuffers上也有同样的问题。他通过修复不正确的上下文设置来解决这个问题。
正如在GLFW的“入门”页面上所述,在“创建窗口和上下文”下面,它们声明
“如果机器上不支持所需的最低版本,则创建上下文(和窗口)失败。”
您的这些机器可能有正确的驱动程序,但可能不支持所有或某些版本的OpenGL,正如文档所述。
如果您正在使用GLFW_CONTEXT_VERSION_MAJOR和GLFW_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;
}https://stackoverflow.com/questions/54938823
复制相似问题