Конференция "Игры" » Помогите организовать буфер вершин. 2D.
 
  • DevilDevil (08.11.08 13:21) [0]
    Имеется (будет иметься) механизм снижения количества DIP-ов.
    Интерфейс взаимодействия сводится к одной функции типа:  Vertex* AllocQuads(Texture, QuadsCount),
    возвращаят указатель на память,  которую нужно заполнить вершинными данными.

    Если Texture отличается  от текущей текстуры - то прорисовать заполненный буффер.

    Вариантов реализации несколько.

    1) Lock() всего буфера -> частичное заполнение -> UnLock() -> DIP

    2) Заполнять свой буфер в ОЗУ -> Lock() части буфера -> копирование из ОЗУ-буфера -> UnLock() -> DIP

    3) Заполнять свой буфер в ОЗУ -> DrawPrimitiveUp (или как там)

    4) Разбить буфер на "сегменты"... пока 1 сегмент рисуется - второй заполняется

    5) Организовать "цепочку записи/чтения". Т.е. если сейчас рисуются квады с 0 по 99, то я могу заполнять квады 100..SIZE...
    Lock()/UnLock(), "возврат каретки"... в общем, механизм, похожий на Stream-проигрывание музыки.

    ...

    Сложно сказать, на сколько квадов в DIP-е расчитано. Может по 5-10, а может и 2000 (частицы).
    Буфер надо создавать с флагом WriteOnly - чтобы увеличить скорость работы. (кстати, в таком случае возможно читать из памяти?)

    Вопрос, возможно, упирается в вопрос "насколько затратно лочить/разлочивать весь буфер".

    У кого какие соображения ?
 
Конференция "Игры" » Помогите организовать буфер вершин. 2D.
Есть новые Нет новых   [134430   +4][b:0][p:0]