Медленное преобразование на основе обратной связи?
Я пытаюсь реализовать процедуру выбора, используя обратную связь. В настоящее время это работает нормально, но проблема очень низкая скорость (медленнее, чем GL_SELECT
).
Как это работает сейчас:
- Привязать ТБО с помощью
glBindBufferRange()
со смещением (0 в начале). - Сбросить память (размер структуры вариаций TF), используя
glBufferSubData()
(чтобы быть уверенным, что выбор будет правильным). Основная проблема здесь. - Нарисуйте объекты с помощью геометрического шейдера, который проверяет пересечение с выбором луча. Если пересечение было найдено, шейдер записывает это в TF по-разному (изначально оно не имеет пересечения, см. Шаг 2).
- Увеличьте смещение и перейдите к шагу 1 со следующим объектом.
Итак, в конце у меня есть массив данных для каждого объекта.
Вопрос в том, как избежать звонка glBufferSubData()
на каждой итерации? Возможные решения (но я не знаю, как их реализовать):
- Пишите только один TF по-разному. Так что не нужно сбрасывать другие
- Сбросить данные любым другим способом
Есть идеи?
1 ответ
Если все, что вы хотите сделать, это очистить область буфера, используйтеglClearBufferSubData
, Это, как говорится, не понятно, почему вам нужно очистить его, а не просто перезаписать, что там.
К вашему сведению: комплектация лучше всего реализована путем рендеринга сцены, назначения объектов разных "цветов" и считывания интересующего пикселя обратно. Ваш метод всегда будет медленнее.