Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ GlenableVertexaryattrib投掷残疾人尺寸_C++_Opengl_Glfw_Glew - Fatal编程技术网

C++ GlenableVertexaryattrib投掷残疾人尺寸

C++ GlenableVertexaryattrib投掷残疾人尺寸,c++,opengl,glfw,glew,C++,Opengl,Glfw,Glew,有两台电脑,都有现代图形卡。两者都处理OpenGL4.6。我得到了这个密码: GLuint VAO; glGenVertexArrays(1, &VAO); glBindVertexArray(VAO); //Setting up the VAO Attribute format glVertexArrayAttribFormat(VAO, 0, 3 * sizeof(float), GL_FLOAT, GL_FALSE, 0); glEnableVertexArrayAttrib(V

有两台电脑,都有现代图形卡。两者都处理OpenGL4.6。我得到了这个密码:

GLuint VAO;
glGenVertexArrays(1, &VAO);
glBindVertexArray(VAO);

//Setting up the VAO Attribute format
glVertexArrayAttribFormat(VAO, 0, 3 * sizeof(float), GL_FLOAT, GL_FALSE, 0);
glEnableVertexArrayAttrib(VAO, 0);
出于某种原因,这段代码在我的一台计算机上运行良好(我的三角形打印正确)(但是OpenGL返回错误:但程序运行正常,没有崩溃)

在我的另一台计算机上(得到了完全相同的代码),当调用glEnableVertexArrayAttrib(VAO,0)并且我的程序崩溃时,我得到了这个错误

我不知道为什么两个错误都发生了,我的VAO在两台计算机上都生成得很好。在调用此代码之前,我检查了OpenGL上下文,它是正确的


如果需要,我可以共享GLFW和Glew Init代码以及我的着色器生成代码(两者都不会产生任何错误,并且它已在我所做的其他测试代码中使用,没有任何问题)

您的大小确实不正确,它不是以字节为单位的。大小表示每个顶点的元素数,例如,
vec3
对应于3:
glVertexArrayAttribFormat(VAO,0,3,GL_FLOAT,GL_FALSE,0)

至于为什么它能在一台电脑上工作,那么,习惯它吧。GPU驱动程序中的OpenGL实现通常是非常神奇和宽容的,除非它们不是

以字节为单位的实际大小在relativeoffset参数和
glVertexArrayVertexBuffer
中起作用,同时还指定偏移量和跨距


考虑使用带有直接状态访问功能的
GLCreateVertexArray
。原因是
glgenvertexarray
仅保留VAO对象,但不创建它(在某些驱动程序上是这样)。只有第一个
glBindVertexArray(VAO)将创建这样的对象。这是危险的,因为任何使用DSA的调用都可能在绑定之前失败,如果您首先使用DSA,则没有理由绑定。我怀疑您已经在这么做了,但是其他看到您的代码和“浪费”绑定的人可能不知道这一点。

当然,经典的GlvertexAttributePointer工作得很好,但我想对多个VBO使用单VAO(如本文所述:@rabbi76我有GLFW源代码(没有lib/dll/a)我在我的两台计算机上都使用clang以64位编译所有内容。请不要将文本作为图像发布,复制到此处。图像不可搜索。感谢“原因是GlgenVertexArray仅保留VAO对象,但不创建它(在某些驱动程序上是这样的)。”它修复了我在其他代码中遇到的许多错误!@Xemuth没问题,这有点出乎意料。它适用于所有glGen*函数。