glVertexAttribPointer(偏移?),给出GL_INVALID_OPERATION
glVertexAttribPointer (Offset?) giving GL_INVALID_OPERATION
我的代码有问题:(OpenGL 4.1核心上下文,我使用的是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*)
有问题。然而,在我开始在课堂上实现它之前,它运行得很好。我可能错过了一些代码
操作系统:小牛,HD5000,Clang编译器在Xcode
根据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个中的一个。最后一个不可能是这样的,因为它并不总是抛出错误,最后一个会。所以根据维基的说法,问题是:
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,因此不是有效的缓冲区对象。如果不是这样的话,我想你只是偶然发现了一个主要的驱动程序错误。
相关文章:
- 如何解决"invalid conversion from 'char' to 'const char*'"
- 如何处理 c++ 中类实现中的"invalid use of non-static data member"?
- C++ "error: invalid use of void expression"
- 收到错误"invalid use of non-static data member 'stu::n' "
- Poloniex API "Invalid command" c++ libcurl
- Visual Studio 19-17 库兼容性根据 GL 标志
- C++模板错误:"invalid explicitly-specified argument for template parameter"
- SDL_CreateTextureFromSurface() "Invalid texture"错误?
- C++ "Invalid use of 'this' in non-member function" ,
- 为什么gmp会在这里与"invalid next size"重新定位一起崩溃?
- glDrawElements GL 错误类型 = 0x824c,严重性 = 0x9146,消息 = GL_INVALID
- 继承类时"invalid use of incomplete type ‘class tree_node_t’"
- 为什么我会"Invalid read of size 8"?(瓦尔格林德)
- 将"Compass"与相机旋转隔离开GL
- "fast"或"normal"在"free(): invalid next size (fast)"中是什么意思?
- 如何在Arduino程序中解决"invalid operands of types"?
- 如何'Invalid conversion'和'no match for operator'更正这些 c++ 错误
- 是否有一个版本的glCopyImageSubData在Openg GL中使用混合?
- 访问函数变体时"Invalid conversion"错误
- glBindFramebuffer 在使用 GL_DRAW_FRAMEBUFFER 目标时会导致 "invalid operation" GL 错误