gpt4 book ai didi

c++ - glVertexAttribPointer(偏移量?)给出 GL_INVALID_OPERATION

转载 作者:太空宇宙 更新时间:2023-11-04 11:40:05 24 4
gpt4 key购买 nike

我的代码有问题:(OpenGL 4.1 Core Context,我正在使用 VertexArrayObjects)

//This is a member method, vertexArrayObject and vertexBufferObject are of course generated using glGenVertexArrays & glGenBuffers
glBindVertexArray(vertexArrayObject);
glBindBuffer(GL_ARRAY_BUFFER, vertexBufferObject);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 8, 0);
Draw::debugLogGLError(); // OpenGL Error #0
glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 8, (void*)(sizeof(float) * 3));
Draw::debugLogGLError(); // OpenGL Error #1282
glEnableVertexAttribArray(2);
glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 8, (void*)(sizeof(float) * 6));
Draw::debugLogGLError(); // OpenGL Error #1282
glBindVertexArray(0);

Draw::debugLogGLError() 只是将最新的错误代码打印到控制台

void Draw::debugLogGLError(void){
std::cout << "OpenGL Error #" << glGetError() << std::endl;
}

如果我删除偏移量 (void*)(sizeof(float) * 3) 它将运行得很好。所以我假设是 (void*) 有问题。然而,在我开始在类里面实现它之前它工作得很好。我可能漏掉了一些代码

操作系统:Xcode 中的 Mavericks、HD5000、Clang 编译器

最佳答案

根据 http://www.opengl.org/wiki/GLAPI/glVertexAttribPointer :

GL_INVALID_OPERATION​ is generated if size​ is GL_BGRA​ and type​ is not GL_UNSIGNED_BYTE​, GL_INT_2_10_10_10_REV​ or GL_UNSIGNED_INT_2_10_10_10_REV​.
GL_INVALID_OPERATION​ is generated if type​ is GL_INT_2_10_10_10_REV​ or GL_UNSIGNED_INT_2_10_10_10_REV​ and size​ is not 4 or GL_BGRA​.
GL_INVALID_OPERATION​ is generated if type​ is GL_UNSIGNED_INT_10F_11F_11F_REV​ and size​ is not 3.
GL_INVALID_OPERATION​ is generated by glVertexAttribPointer if size​ is GL_BGRA​ and noramlized​ is GL_FALSE​.
GL_INVALID_OPERATION​ is generated if zero is bound to the GL_ARRAY_BUFFER​ buffer object binding point and the pointer​ argument is not NULL​.
GL_INVALID_OPERATION​ is generated if no vertex array object is bound.

前 4 个显然不是这种情况,所以它必须是最后 2 个之一。最后一个不可能是这种情况,因为它并不总是抛出错误,而最后一个会。所以根据 wiki 的问题是:

GL_INVALID_OPERATION​ is generated if zero is bound to the GL_ARRAY_BUFFER​ buffer object binding point and the pointer​ argument is not NULL​.

这意味着您代码中的 vertexBufferObject 为 0,因此不是有效的缓冲区对象。如果不是这种情况,我认为您只是偶然发现了一个主要的驱动程序错误。

关于c++ - glVertexAttribPointer(偏移量?)给出 GL_INVALID_OPERATION,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21712794/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com