Несколько тесно связанных вопросов, касающихся буферных объектов в OpenGL.
Есть ли какие-либо другие причины, помимо постоянного отображения, для выделения неизменяемого буфера? Даже если пользователь выделяет память для буфера только один раз, с изменяемыми буферами у него всегда есть возможность сделать это снова, если это необходимо. Кроме того, с изменяемыми буферами вы можете явно указать подсказку по использованию.
Как люди обычно изменяют данные с помощью сопоставленного указателя? Насколько я понимаю, вы можете вносить изменения в один элемент или в несколько. Для одноэлементных изменений все, что я мог придумать, это
operator[]
на отображаемом указателе, как если бы это был массив в стиле C. Для многоэлементных изменений единственное, что я мог придумать, этоmemcpy
, но в этом случае не лучше ли использоватьglBufferSubData
?- Говоря о
glBufferSubData
, есть ли действительно какая-то разница между его вызовом и простым выполнениемmemcpy
на отображаемом указателе? Я слышал, что первый делает больше, чем 1memcpy
, это правда? - Есть ли известная причина, по которой вы не можете указать подсказку об использовании для неизменяемого буфера?
Я знаю, что эти вопросы в основном касаются производительности, и поэтому на них можно ответить простым «просто профилируйте и посмотрите», но в то время, когда я задаю этот вопрос, речь идет не столько о производительности, сколько о дизайне, т. е. я хочу чтобы узнать о хороших практиках выбора между изменяемым и неизменяемым буфером и о том, как мне изменять их содержимое.