GLSL Transform Feedback return Array vs Vector

0

Когда я объявляю массив структур явным образом, мой цикл обратной обратной связи работает отлично.

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 и по-прежнему работать плавно с помощью цикла обратной связи преобразования?

  • 0
    Вы пытались использовать итератор: т.е. FBI.begin() ?
  • 0
    Поместите итератор где, в вызове glGetBufferSubData?
Показать ещё 2 комментария
Теги:
opengl
vector
glsl

1 ответ

2
Лучший ответ
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() потому что я думаю, что лучше читать.

  • 0
    Работал отлично! Спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню