Was will glVertexAttribIPointer denn haben, das offset als int, heißt wenn ich z.B. mit 1, 2, 3, 1, 2, 3, ... teste:
|
C-/C++-Quelltext
|
1
2
3
4
|
glBindBuffer(GL_ARRAY_BUFFER, buffer);
glVertexAttribIPointer(m_shader->getAttribLocation("data0"), 1, GL_INT, sizeof(int)*2, 0); // a
glVertexAttribIPointer(m_shader->getAttribLocation("data1"), 1, GL_INT, sizeof(int)*2, reinterpret_cast<GLvoid*>(1)); // b
glVertexAttribIPointer(m_shader->getAttribLocation("data2"), 1, GL_INT, sizeof(int)*2, reinterpret_cast<GLvoid*>(2)); // c
|
So das bei a [1], 2, 3, [1], 2, 3, ... ausgewählt werden müsste (8 byte Abstand, angefangen beim ersten Element).
Bei b 1, [2], 3, 1, [2], 3, ... (8 byte Abstand, zweites Element als Anfang).
Und c genauso...
Wenn ich das im Shader teste (der Buffer ist komplett mit 1, 2, 3, ... gefüllt):
|
Quellcode
|
1
2
3
|
if(data0 == 1 && data1 == 2 && data2 == 3){
gl_Position = pm*pos;
}
|
Wird nichts gerendert. Das heißt die Daten kommen so nicht richtig an. Wenn ich aber:
|
C-/C++-Quelltext
|
1
2
3
4
|
glBindBuffer(GL_ARRAY_BUFFER, buffer);
glVertexAttribIPointer(m_shader->getAttribLocation("data0"), 1, GL_INT, sizeof(int)*2, 0); // a
glVertexAttribIPointer(m_shader->getAttribLocation("data1"), 1, GL_INT, sizeof(int)*2, reinterpret_cast<GLvoid*>(4)); // b
glVertexAttribIPointer(m_shader->getAttribLocation("data2"), 1, GL_INT, sizeof(int)*2, reinterpret_cast<GLvoid*>(8)); // c
|
Und also davon ausgehe das der letzte Parameter in byte sein soll, wird immerhin ein Teil des Mesh gerendert... ich versteh diese Funktion nicht
[Edit]
Übrigens bekomme ich da durch glGetError() eine 1281, also invalid value.