Я начал использовать объекты Pixel Buffer, и хотя я понимаю, как их использовать, и суть того, что они делают, я действительно не знаю, что происходит под капотом.Мне известно, что спецификация OpenGL допускает свободу действий в отношении точной реализации, но это все еще за мной.
Насколько я понимаю, объект буфера обычно находится на стороне сервера в GRAM;хотя, по-видимому, это может варьироваться в зависимости от target и использование .Это имеет смысл, поскольку именно поэтому вызовы OpenGL на BO будут работать так быстро.Но в каких случаях он находится в AGP или системной памяти?(дополнительный вопрос: имеет ли PCI-e эквивалент памяти AGP?)
Кроме того, glMapBuffers()
возвращает указатель на блок памяти BO, чтобы данные могли быть прочитаны / записаны / изменены.Но как это сделать?Манипуляции происходят на стороне клиента, поэтому данные все равно должны как-то передаваться с сервера на клиент.Если это так, как лучше, чем glReadPixels()
?Очевидно, что PBO лучше, чем glReadPixels()
, что очевидно по разнице в производительности, я просто не понимаю, как.
Я еще не использовал FBO, но слышал, что их лучше использовать.Это правда?если так, то почему?