Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.216.110.157] |
|
Сообщ.
#1
,
|
|
|
Привет.
Продолжаю дальше разбираться с OpenGL. Пока читал про шейдеры, там вроде все сходится. Но как начал читать про буферы тут же запутался в этих функциях GLAPI void APIENTRY glBindBuffer (GLenum target, GLuint buffer); GLAPI void APIENTRY glBufferData (GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage); GLAPI void APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data); GLAPI void APIENTRY glGetBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data); GLAPI GLvoid* APIENTRY glMapBuffer (GLenum target, GLenum access); Конкретно не понятно, на кой там везде параметр target. Ну то есть я бы понял если бы он был только в BindBuffer - ну типа биндем весь буфер для одного таргета. Или везде кроме BindBuffer - помечаем кусок данных нужным таргетом. Но как они вместе связаны - не понял. Особенно смущает это параметр в GetBufferSubData и в MapBuffer - в обще не понятно какой там у него смысл. Мы же вроде как привязали данные к таргету. В общем прошу помощи в понимании этого загадочного парамтра, а то я уже как-то себе весь мозг сломал. |
Сообщ.
#2
,
|
|
|
В общем хватило еще раз внимательно прочитать ман про glBindBuffer и все встало на свои места.
(Если вдруг сюда забредет еще с таким вопросом кто, все же поясню) У OGL есть несколько типов буферов, эти типы как раз и задаются параметром target. В один момент времени к конкретному типу буфера может быть привязан только один конкретный буфер. glBindBuffer - этим как раз и занимается. Если вдруг к target уже был привязан буфер, то он будет отвязан. тот самый параметр target в остальных функциях просто достает текущий буфер который привязан к нему. И если я доконца и правильно понял ман, то в одном физическом буфере могут хранится данные для разных таргетов. По этому во всяких функциях типа glVertexPointer параметр pointer является оффсетом от начала буфера и есть парамтр stride который указывает смещение между точками. Надеюсь доступна объяснил и правильно. Поправте если что. |