Дано:
http://i.zlowiki.ru/180404_4a3992fd.png
Рисуется так
glSetPrimitiveRestartIndex(PR) VertexBuffer одинаковый.
Index buffer у всех
0, 1, 2, 3, 4, 5, 6, 7, PR, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, PR
две струкутры RC c полями mFirstIndex, mNumIndices.
1) картинка верна, получена либо:
rc1 = {0,8}, rc2 = {9,11}
glDrawElements(GL_TRIANGLE_STRIP,
rc.mNumIndices,
GL_UNSIGNED_INT,
(GLvoid*)(long)(rc.mFirstIndex*4));
А также
rc1={0,20}
rc1={0,20}
glDrawElementsBaseVertex(GL_TRIANGLE_STRIP,
rc.mNumIndices,
GL_UNSIGNED_INT,
NULL,
rc.mFirstIndex);
2)картинка неверна, вторая фигура без первой и последней вершины
rc1 = {0,8}, rc2 = {9,11}
glDrawElementsBaseVertex(GL_TRIANGLE_STRIP,
rc.mNumIndices,
GL_UNSIGNED_INT,
NULL,
rc.mFirstIndex);
3) проверяю что вершина всё таки есть:
rc1 = {0,8}, rc2 = {9,11}
glDrawElementsBaseVertex(GL_TRIANGLE_STRIP,
rc.mNumIndices,
GL_UNSIGNED_INT,
NULL,
rc.mFirstIndex-1);
но если сделать rc.mNumIndices+2 и rc.mFirstIndex-1 чтоб зацепить эти две пропавшие вершины, то первая вершина появляестя, но вместо последних двух вершин как будто нули. В доке написано, что это говно просто «добавляет baseIndex». И вот нет!
А на AMD всё работает! я там сцену в один выстрел рисовал через glMultiDrawElementsIndirect, всё рисуется,ракеты летают, в ИК канале светятся, погода все дела. Переносим на NVidia. И всё, пустота. ни пикселя ни отрисовано. Ну ладно, подумал, бывает, функция сложная всё таки. А тут опять и уже на такой простой древней функции.
Вот эти вот ихние пионерские поделки из текстолита вы называете графическими процессорам? Я не понимаю, как на этом говне вообще можно рисовать что-то сложнее тухрасера.