Итак, просто чтобы понять это, преимущество интерфейса в том, что я могу отделить вызов метода от любого конкретного класса. Вместо этого создается экземпляр интерфейса, где реализация предоставляется из того класса, который я выбираю, который реализует этот интерфейс. Таким образом, у меня есть много классов, которые имеют сходную, но немного отличающуюся функциональность, а в некоторых случаях (случаи, связанные с намерением интерфейса) не заботятся о том, какой именно объект.
Например, я мог бы интерфейс движения. Метод, который делает что-то «движение», и любой объект (Person, Car, Cat), который реализует интерфейс движения, может быть передан и передан для перемещения. Без метода, каждый из которых знает тип класса.
Хорошая вещь о glMapBuffer
заключается в том, что вам не нужно сначала копировать данные в массиве, а затем использовать glBufferSubData
для заполнения буфера opengl. С помощью glMapBuffer
вы можете скопировать данные непосредственно в часть памяти, которую opengl будет извлекать на GPU, когда это необходимо. С моей точки зрения, glMapBuffer
должен быть быстрее, если вы хотите заполнить большой буфер, который будет часто обновляться. Также важно, как вы копируете данные в буфер между glMapBuffer
и glUnmapBuffer
.
Если вы покажете нам код, который вы используете glMapBuffer
, и насколько велики данные, тогда мы можем судить об этом проще. Во всяком случае, в конце измерения могут показать вам, какой из них лучше.
UPDATE: OpenGL Insight Асинхронный буферный буфер Глава . В этой главе вам могут быть интересны функции implicit synchronization
функций glMapBuffer
и glSubBufferData
.
glMapBuffer
копирует данные в массив памяти процессора. Разница только в том, чтоglBufferSubData
использует выделенный пользователем массив, а сglMapBuffer
драйвер выделяет его. – BDL 26 August 2015 в 10:41glMapBuffer
вам необходимо скопировать данные из его исходного местоположения в отображаемую память процессора (которая уже может быть медленной). Затем сопоставленная память копируется в gpu. С помощьюglBufferSubData
исходная память может быть скопирована непосредственно в gpu. – BDL 26 August 2015 в 10:46glMapBuffer
более общий. Вы можете делать то, чтоglBufferSubData
делает сglMapBuffer
и даже больше. Итак, если вы можете использовать оба варианта, между ними не должно быть разницы, но все жеglMapBuffer
может сделать гораздо больше. Итак, если вам просто нужно изменить значения z ваших координат вершин, вы сможете сделать это быстрее с помощьюglMapBuffer
, поскольку вам просто нужно изменить компонент z вершин. – mmostajab 26 August 2015 в 11:18glMapData
иglSubBufferData
должны быть идентичными. – mmostajab 26 August 2015 в 11:21