glVertexAttribPointer raising GL_INVALID_OPERATION
glVertexAttribPointer raising GL_INVALID_OPERATION
我正在尝试将一个非常基本的OpenGL 3.2(核心配置文件)应用程序放在一起。在下面的代码中,该代码应该创建一个包含三角形顶点位置的 VBO,对glVertexAttribPointer
的调用失败并引发 OpenGL 错误GL_INVALID_OPERATION
。这是什么意思,我该如何修复它?
GLuint vbo, attribLocation = glGetAttribLocation(...);
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
GLfloat vertices[] = { 0, 1, 0, 1, 0, 0, -1, 0, 0 };
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
glEnableVertexAttribArray(attribLocation);
// At this point, glGetError() returns GL_NO_ERROR.
glVertexAttribPointer(attribLocation, 3, GL_FLOAT, GL_FALSE, 0, 0);
// At this point, glGetError() returns GL_INVALID_OPERATION.
glEnableVertexAttribArray(program.getAttrib("in_Position"));
// A call to getGLError() at this point prints nothing.
glVertexAttribPointer(program.getAttrib("in_Position"), 3, GL_FLOAT, GL_FALSE, 0, 0);
// A call to getGLError() at this point prints "OpenGL error 1282".
首先,这里有一个明显的驱动程序错误,因为glEnableVertexAttribArray
也应该发出GL_INVALID_OPERATION
错误。或者你在检查它时犯了一个错误。
为什么两个函数都会出错?因为您没有使用顶点数组对象。 glEnableVertexAttribArray
在当前 VAO 中设置状态。目前没有VAO,所以...错误。glVertexAttribPointer
也是如此.它甚至在这些页面上的两个错误列表中。
在兼容性上下文中不需要 VAO,但在核心上下文中需要。你要求的。所以。。。您需要一个:
GLuint vao;
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
把它放在你的设置中的某个地方,你的程序就会工作。
<小时 />顺便说一句,这个:
glfwOpenWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
仅当您打算在 MacOS 的 GL 3.2+ 实现上运行代码时才需要。除非您以此为目标,否则它是不必要的,并且可能会造成中断,因为核心上下文中提供了少量不属于向前兼容性的功能(例如,宽行)。
相关文章:
- 如何解决"invalid conversion from 'char' to 'const char*'"
- 如何处理 c++ 中类实现中的"invalid use of non-static data member"?
- C++ "error: invalid use of void expression"
- 套接字连接"Operation not permitted"错误,甚至使用升压/平发器根.cpp
- 收到错误"invalid use of non-static data member 'stu::n' "
- Poloniex API "Invalid command" c++ libcurl
- 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"重新定位一起崩溃?
- 继承类时"invalid use of incomplete type ‘class tree_node_t’"
- 为什么我会"Invalid read of size 8"?(瓦尔格林德)
- "fast"或"normal"在"free(): invalid next size (fast)"中是什么意思?
- 如何在Arduino程序中解决"invalid operands of types"?
- 在 atomic() 中 ++、add operation 和 fetch_add() 有什么区别
- 如何'Invalid conversion'和'no match for operator'更正这些 c++ 错误
- 访问函数变体时"Invalid conversion"错误
- "Floating-point invalid operation"将浮点数输入到字符串流时
- 防止"Float-point invalid operation"异常?
- glBindFramebuffer 在使用 GL_DRAW_FRAMEBUFFER 目标时会导致 "invalid operation" GL 错误