Медленное преобразование на основе обратной связи?

Я пытаюсь реализовать процедуру выбора, используя обратную связь. В настоящее время это работает нормально, но проблема очень низкая скорость (медленнее, чем GL_SELECT).

Как это работает сейчас:

  1. Привязать ТБО с помощью glBindBufferRange() со смещением (0 в начале).
  2. Сбросить память (размер структуры вариаций TF), используя glBufferSubData() (чтобы быть уверенным, что выбор будет правильным). Основная проблема здесь.
  3. Нарисуйте объекты с помощью геометрического шейдера, который проверяет пересечение с выбором луча. Если пересечение было найдено, шейдер записывает это в TF по-разному (изначально оно не имеет пересечения, см. Шаг 2).
  4. Увеличьте смещение и перейдите к шагу 1 со следующим объектом.

Итак, в конце у меня есть массив данных для каждого объекта.

Вопрос в том, как избежать звонка glBufferSubData() на каждой итерации? Возможные решения (но я не знаю, как их реализовать):

  • Пишите только один TF по-разному. Так что не нужно сбрасывать другие
  • Сбросить данные любым другим способом

Есть идеи?

1 ответ

Если все, что вы хотите сделать, это очистить область буфера, используйтеglClearBufferSubData, Это, как говорится, не понятно, почему вам нужно очистить его, а не просто перезаписать, что там.

К вашему сведению: комплектация лучше всего реализована путем рендеринга сцены, назначения объектов разных "цветов" и считывания интересующего пикселя обратно. Ваш метод всегда будет медленнее.

Другие вопросы по тегам