Я пытаюсь рисовать opengl 3d-ландшафт, однако я начал задаваться вопросом, есть ли огромная головная боль процессора, если у меня много вершин, не рисуя с ними никаких треугольников.Имея много вершин
ответ
Возможно, накладные расходы, но это не должно быть огромным. Многие из них сильно зависят от платформы.
В основном графические процессоры используют адресные пространства, отличные от того, что использует процессор. Чтобы страницы памяти были доступны для графического процессора, страницы должны отображаться в адресное пространство графического процессора. Для создания этих сопоставлений есть некоторые служебные данные на каждой странице. Страницы памяти, к которым обращается GPU, также могут быть привязаны/подключены, чтобы предотвратить их выгрузку, пока графический процессор обращается к ним. Опять же, для проводки страниц могут возникать некоторые служебные накладные расходы.
Пока буфер остается отображаемым, вы платите только за эти операции только один раз, а не за каждый кадр. Но если достигнуты лимиты ресурсов, либо вашим приложением, либо в сочетании с другими приложениями, которые также используют графический процессор, ваши буферы могут быть отключены, а служебные данные могут повторяться.
Если у вас колоссальные буферы и, как правило, используется только очень небольшая их часть, может быть полезно разделить геометрию на несколько меньших буферов. Конечно, это практично, если вы можете группировать свои вершины, чтобы в большинстве случаев использовать вершины из небольшого количества буферов для любого заданного кадра. Существует также накладные расходы для привязки каждого буфера, поэтому слишком много буферов также нежелательно.
Если вершины, используемые для вызова ничьей, находятся в ограниченном диапазоне индексов, вы также можете посмотреть на использование glDrawRangeElements()
для рисования. С помощью этого вызова вы предоставляете диапазон индексов, который может использоваться вызовом draw, что дает драйверу возможность отображать только часть буфера вместо всего буфера.
Данные, которые находятся в памяти, но не имеют активного доступа, просто занимают память и не влияют на потребление тактовых импульсов процессора. Это справедливо для любых данных в любой памяти.