Это чувствует, как взломать, но вы можете явно задать параметр glVertexAttribPointer
stride
в размере одного float
.
В принципе, всякий раз, когда GL извлекает вершину с индексом i
, он будет использовать адрес offset + i * stride
. 0
, который вы используете в настоящее время в качестве параметра stride, представляет собой удобный ярлык, означающий плотно упакованный массив, поэтому он будет эквивалентен 2 * sizeof(GLfloat)
в вашем случае, но в GL нет ничего, что мешает вам установить шаг ниже этого значения плотно :
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(GLfloat), 0);
Это ответ на вопрос, byt У меня все еще проблема, я хочу получить доступ к предыдущим значениям вершин в шейдере, мне нужен только последний. Вы правы, у него что-то вроде взлома, есть ли лучший способ? – user2170324
@derhass, если вам нужно установить шаг в плотно упакованном массиве vec2, шаг должен быть: 2 * sizeof (GLfloat), а не sizeof (GLfloat), как в вашем коде. – wangdq
@wangdq: это правда, но это не то, о чем был вопрос - и ответ. Я прямо заявил: «Но в GL нет ничего, что мешает вам установить шаг ниже этого значения плотно упакованного массива:». – derhass