с использованием opengl 3.3, radeon 3870HD, c ++ ..
У меня вопрос о чередующихся массивах данных. Я попал в структуру приложения в векторе, который отправляется как данные в буферный объект. Примерно так:
struct data{
int a;
int b;
int c;
};
std::vector<data> datVec;
...
glBufferData(GL_ARRAY_BUFFER, sizeof(data)*datVec.size(), &datVec[0], GL_DYNAMIC_DRAW);
это нормально, я использую эту вещь очень часто. Но я создаю чередующийся массив, поэтому данные выглядят так:
a1,b1,c1,a2,b2,c2,a3,b3,c3
Теперь я отправляю эту вещь для обработки в GPU и с обратной связью преобразования преобразую обратно в буфер, например, для переменных b. Так это выглядит:
bU1, bU2, bU3
Я хотел бы скопировать обновленные значения в чередующийся буфер, это можно сделать с помощью какой-то одной команды, например glCopyBufferSubData? Этот не подходит, так как он принимает только смещение и размер, а не шаг (вероятно, это что-то вроде memcpy в c ++) ... Результат должен выглядеть следующим образом:
a1, bU1, c1, a2, bU2, c2, a3, bU3, c3
Если нет, то есть ли лучший подход, чем эти 2 мои?
отобразить обновленный буфер, скопировать значения во временное хранилище в приложении, отменить обновление карты, отобразить буфер данных и, повторяя через него, установить новые значения
отдельные буферы на постоянный буфер и переменный буфер. константа останется неизменной с течением времени, но с помощью glCopyBufferSubData переменная, которая может быть обновлена за один вызов.
Спасибо