【发布时间】:2014-02-11 20:54:46
【问题描述】:
我的代码有问题:(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*) 有问题。然而,在我开始在课堂上实现它之前它工作得很好。
我可能错过了一些代码
操作系统:Mavericks、HD5000、Xcode 中的 Clang 编译器
【问题讨论】:
-
这似乎是正确的,唯一与我的代码不同的是:我不在任何地方调用
glBindVertexArray,我只是将我的顶点缓冲区装箱并在glVertexAttribPointer之后调用glEnableVertexAttribArray. -
嗯。仍然收到
GL_INVALID_OPERATION。我在使用核心上下文时读过必须实现顶点数组对象 -
你能贴出你的顶点缓冲区的初始化代码吗?
标签: c++ opengl void-pointers