У меня проблемы с пониманием того, как использовать один буфер с тремя разными данными в нем, у меня есть следующая структура для моих данных vert, text, color:
struct xyzf {
float x, y, z;
};
struct xyf {
float x, y;
};
struct vertype {
xyzf points[4];
};
struct textype {
xyf points[4];
};
struct coltype {
GLuint points[4];
};
struct buftype {
vertype vertex;
textype texcoord;
coltype color;
};
Затем я (пытаюсь) использовать его следующим образом (что имеет для меня наибольший смысл):
glBindBufferARB(GL_ARRAY_BUFFER, mybufid);
glVertexPointer(3, GL_FLOAT, sizeof(buftype), 0);
glTexCoordPointer(2, GL_FLOAT, sizeof(buftype), (GLvoid *)sizeof(vertype));
glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(buftype), (GLvoid *)(sizeof(vertype)+sizeof(textype)));
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glDrawArrays(GL_QUADS, 0, indices);
glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);
glBindBufferARB(GL_ARRAY_BUFFER, 0); // unbind
Но он терпит неудачу, и его рендеринг отличается от того, что я получил, установив шаг и указатели на ноль. Когда я это делаю, я получаю правильно отображаемые данные вершин, но текст/цвет по-прежнему неверны.
Я не могу использовать &data[0].vertex для последнего параметра в glVertexPointer() и т. д., потому что у меня больше нет данных, так как я использую VBO, этот метод работает только с массивами вершин.
Также я не уверен, как работает значение счетчика для glDrawArrays(), я читал документы, в которых говорится, что это индексы, поэтому у четырехугольника будет 4, верно? Но когда я умножаю количество четырехугольников на 4, отображается только ПОЛОВИНА моих вершин, что там происходит? (он отобразит их все, если я умножу на 8...)