У меня есть проблемы с моим кодом: (OpenGL 4.1 Основной контекст, я использую VertexArrayObjects)glVertexAttribPointer (смещение?) Дает GL_INVALID_OPERATION
//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);
Розыгрыш :: debugLogGLError() просто выводит последний код ошибки в консоли
void Draw::debugLogGLError(void){
std::cout << "OpenGL Error #" << glGetError() << std::endl;
}
Если удалить корректоры (void*)(sizeof(float) * 3)
он будет работать нормально. Так что я предполагаю, что у (void*)
есть проблемы. Однако он работал отлично, прежде чем я начал реализовывать это в классе. я бы пропустил код
OS: Mavericks, HD5000, Clang компилятор в Xcode
Это кажется правильным, единственное, что отличается от моего кода: я не называю 'glBindVertexArray' в любом месте, я просто использую мой буфер вершин и вызываю' glEnableVertexAttribArray' после 'glVertexAttribPointer'. –
Hm. По-прежнему получается 'GL_INVALID_OPERATION'. Я читал при использовании основного контекста. Объекты вершинного массива должны быть реализованы. – Phlenum
Можете ли вы опубликовать код инициализации вашего буфера вершин? –