Arhn - архитектура программирования

Изменяемое и неизменяемое хранилище

Несколько тесно связанных вопросов, касающихся буферных объектов в OpenGL.

  1. Есть ли какие-либо другие причины, помимо постоянного отображения, для выделения неизменяемого буфера? Даже если пользователь выделяет память для буфера только один раз, с изменяемыми буферами у него всегда есть возможность сделать это снова, если это необходимо. Кроме того, с изменяемыми буферами вы можете явно указать подсказку по использованию.

  2. Как люди обычно изменяют данные с помощью сопоставленного указателя? Насколько я понимаю, вы можете вносить изменения в один элемент или в несколько. Для одноэлементных изменений все, что я мог придумать, это operator[] на отображаемом указателе, как если бы это был массив в стиле C. Для многоэлементных изменений единственное, что я мог придумать, это memcpy, но в этом случае не лучше ли использовать glBufferSubData?

  3. Говоря о glBufferSubData, есть ли действительно какая-то разница между его вызовом и простым выполнением memcpy на отображаемом указателе? Я слышал, что первый делает больше, чем 1 memcpy, это правда?
  4. Есть ли известная причина, по которой вы не можете указать подсказку об использовании для неизменяемого буфера?

Я знаю, что эти вопросы в основном касаются производительности, и поэтому на них можно ответить простым «просто профилируйте и посмотрите», но в то время, когда я задаю этот вопрос, речь идет не столько о производительности, сколько о дизайне, т. е. я хочу чтобы узнать о хороших практиках выбора между изменяемым и неизменяемым буфером и о том, как мне изменять их содержимое.

23.07.2019

  • Очень сложно ответить на все ваши вопросы. 2, вероятно, слишком основан на мнениях, потому что спрашивает, как люди что-то делают. О 3) Связано, Также по теме 23.07.2019

Ответы:


1

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

Именно поэтому их не следует использовать. Перераспределение хранилища буферного объекта (за исключением инвалидации) не является полезным. Водителям приходится много работать, чтобы это стало возможным.

Так что иметь API, который убирает инструменты, которые вы не должны использовать, — это хорошо.

Как люди обычно изменяют данные с помощью сопоставленного указателя?

Обычно вы используете тот инструмент, который наиболее подходит к обстоятельствам. Смысл наличия сопоставленного указателя заключается в прямом доступе к хранилищу, поэтому запись ваших данных в другое место и копирование их вручную как бы работает против этой цели.

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

Потому что API неизменяемого буфера был написан людьми, которые не хотели иметь ужасные, бесполезные и бессмысленные параметры. Подсказка по использованию изменяемых буферов полностью игнорируется несколькими реализациями, потому что пользователи постоянно путались в том, что означают эти подсказки, что люди использовали их в странных сценариях.

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

Подсказки были плохой идеей и должны были умереть.

23.07.2019
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..