Когда я объявляю массив структур явным образом, мой цикл обратной обратной связи работает отлично.
struct FeedBackInfo
{
float area;
float Pabs;
float Pref;
}
FeedBackInfo FBI[36];
....
....
glGetBufferSubData(GL_TRANSFORM_FEEDBACK_BUFFER, 0,sizeof(FBI), FBI);
Тем не менее, я бы хотел не ограничиться 36-очковым ящиком, который я создал для своей примерной программы, и иметь возможность масштабирования в зависимости от загруженной модели. Но когда я пытаюсь переключиться на векторный объект, который может быть динамически распределен, я не могу заставить обратную связь преобразования работать.
struct FeedBackInfo
{
float area;
float Pabs;
float Pref;
};
std::vector<FeedBackInfo> FBI;
FBI.resize(36);
....
....
Это не удастся
glGetBufferSubData(GL_TRANSFORM_FEEDBACK_BUFFER, 0,sizeof(FBI), &FBI);
Это только заполнит несколько значений в смещенной усадьбе
glGetBufferSubData(GL_TRANSFORM_FEEDBACK_BUFFER, 0,sizeof(FBI), &FBI[0]);
Я не могу даже повторять от 0 до 35 и заполнять все данные, заполняются только области.
Я не понимаю, почему явное объявление массива структур будет работать гладко и почему его превращение в векторный объект внезапно не сработает.
Есть ли способ динамически распределить структуру FeedBackInfo и по-прежнему работать плавно с помощью цикла обратной связи преобразования?
std::vector<FeedBackInfo> FBI;
FBI.resize(36);
Ваш sizeof(FBI);
не размер вашей памяти. Если вы хотите иметь размер памяти (данных, а не вектора), вам нужно использовать FBI.size()*sizeof(FeedBackInfo)
glGetBufferSubData(GL_TRANSFORM_FEEDBACK_BUFFER, 0, FBI.size()*sizeof(FeedBackInfo), FBI.data());
Я заменил ваш &FBI[0]
на FBI.data()
потому что я думаю, что лучше читать.
FBI.begin()
?