На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела "Программирование графики"
1) Данный раздел предназначен для обсуждения проблем, возникающих при программировании задач, связанных с чтением, сохранением, обработкой, созданием, отрисовкой графической информации (в том числе - 3D [OpenGL, Direct3D] и анимации [в т.ч. VFW, DirectShow, OpenDML]).
Флэш обсуждают здесь!.

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

3) Уважаемые новички! Мы приветствуем Ваше желание научить всех посетителей раздела правильному программированию. Но огромная просьба, перед тем, как писать поучения в старых (последний ответ - "старее" месяца, а особенно, если вопрошавший не появляется на форуме уже не первый месяц, в чем можно убедиться в его профиле) темах, хорошо подумать, будет ли кому-нибудь, кроме Вас cамих, это интересно.



Ваше мнение о модераторах: user posted imageBarazuk, user posted imageOpenGL, user posted imageMikle
Модераторы: OpenGL, Mikle
  
> OpenGL и буферы
    Привет.
    Продолжаю дальше разбираться с OpenGL.
    Пока читал про шейдеры, там вроде все сходится.
    Но как начал читать про буферы тут же запутался в этих функциях
    ExpandedWrap disabled
      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 - в обще не понятно какой там у него смысл. Мы же вроде как привязали данные к таргету.
    В общем прошу помощи в понимании этого загадочного парамтра, а то я уже как-то себе весь мозг сломал.
      В общем хватило еще раз внимательно прочитать ман про glBindBuffer и все встало на свои места.

      (Если вдруг сюда забредет еще с таким вопросом кто, все же поясню)

      У OGL есть несколько типов буферов, эти типы как раз и задаются параметром target. В один момент времени к конкретному типу буфера может быть привязан только один конкретный буфер. glBindBuffer - этим как раз и занимается. Если вдруг к target уже был привязан буфер, то он будет отвязан.
      тот самый параметр target в остальных функциях просто достает текущий буфер который привязан к нему. И если я доконца и правильно понял ман, то в одном физическом буфере могут хранится данные для разных таргетов. По этому во всяких функциях типа glVertexPointer параметр pointer является оффсетом от начала буфера и есть парамтр stride который указывает смещение между точками. Надеюсь доступна объяснил и правильно. Поправте если что.
      1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0178 ]   [ 14 queries used ]   [ Generated: 18.05.24, 12:35 GMT ]